07、更加抽象--类

1、类的定义、使用、方法:
1>在python中,类的定义与函数的定义类似,类使用关键字‘class’。定义类时也要使用缩进的形式,以表示缩进的语句属于该类。
2>类在定义之后必须实例化才能使用属性和方法,一个类可以实例化成多个对象,如果直接使用类名修改类中的属性,那么所有实例化该类的对象都会被改变。
3>使用def定义方法,必须包含参数‘self’,而且‘self’必须为第一个参数
  1. __author__ = 'Administrator'
  2. # coding=utf-8
  3. class Test:
  4. name='Hero'
  5. def age(self):
  6. return 'I am 28 Old'
  7. class Baidu(): title='百度一下,你就知道'
  8. def url(self):
  9. return 'Http://www.baidu.com'
  10. t=Test()
  11. print t.name
  12. print t.age()
  13. bai=Baidu()
  14. print bai.title
  15. print bai.url()
  16. #The Results:
  17. # Hero
  18. # I am 28 Old
  19. # 百度一下,你就知道
  20. # Http://www.baidu.com
2、类的继承:
通过()中的继承父类,可以直接调用父类的函数,也可以通过,分隔符进行多重继承。
  1. _author__ = 'Administrator'
  2. # coding=utf-8
  3. class Test:
  4. name='Hero'
  5. def age(self):
  6. return 'I am 28 Old'
  7. class Sohu:
  8. Sohu_title='搜狐一下,你就知道'
  9. class Baidu(Test,Sohu):
  10. #继承Test、Sohu类,多重继承
  11. title='百度一下,你就知道'
  12. def url(self):
  13. return 'Http://www.baidu.com'
  14. #调用Test、Sohu类属性
  15. new_name=Test.name
  16. sohu_news=Sohu.Sohu_title
  17. #函数中调用父类函数以及属性
  18. def new_num(self):
  19. return self.age()
  20. def sohu_title(self):
  21. return self.Sohu_title
  22. def new_nn(self):
  23. return self.name
  24. bai=Baidu()
  25. print bai.new_name,' ',bai.new_num(),' ',bai.new_nn(),' ',bai.sohu_news
  26. #The Results:
  27. # Hero
  28. # I am 28 Old
  29. # Hero
  30. # 搜狐一下,你就知道
3、类的属性:类中属性以双下划线__开始的为私有类,反之为公有类。私有类不可以在类外部使用或访问。
内部使用私有属性的调用方:self.__私有类名,式为
外部使用私有属性的调用方式为:实例化对象._类名__属性
  1. class Private:
  2. __name='Private funtion'
  3. def name(self):
  4. return self.__name
  5. pp=Private()
  6. print pp.name()
  7. #外部调用私有属性
  8. print pp._Private__name
  9. #The Results
  10. #Private funtion

4、类的专有方法之__init__:
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就name,score等属性绑上去.
有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须 方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:
  1. class Student(object):
  2. def __init__(self, name, score):
  3. self.name = name
  4. self.score = score
  5. stu=Student('Hero','python ')
  6. print stu.name
  7. print stu.score
  8. #The Results
  9. # Hero
  10. # python
5、静态方法和类成员方法
  1. __author__ = 'Administrator'
  2. # coding=utf-8
  3. import sys
  4. reload(sys)
  5. sys.setdefaultencoding("utf-8")
  6. #@classmethod 修饰符
  7. #通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法。
  8. #正常不实用@classmetod
  9. class Yest():
  10. def hero(self):
  11. return "Hello,Hero"
  12. a=Yest()
  13. print a.hero()
  14. #结果:Hello,Hero
  15. #使用#classmethod,classmethod修饰的函数第一个参数应该是cls,即调用类为第一个参数,而不能为空
  16. class Nest():
  17. @classmethod
  18. def shero(cls):
  19. return "Hello,shero"
  20. @staticmethod
  21. def hello():
  22. return "This is a staticmethod"
  23. print Nest.shero()
  24. print Nest.hello()
  25. #result:Hello,shero,This is a staticmethod
  26. #注意:@classmethod和@staticmetod区别在于,一个可以没参数一个必须要有cls参数












原文地址:https://www.cnblogs.com/hero-blog/p/4113519.html