类的概念:一组相关数据,和操作这组数据的方法存到一起。
- 属性(类变量、实例变量)
- 方法(实例方法、类方法、静态方法)
那么这些属性和方法是怎么去访问的呢?下面进行总结,方便对比和记忆:
1 class Person: 2 count = 0 #类变量 3 nation = "中国" 4 5 def __init__(self,name,gender): 6 self.name = name 7 self.gender = gender 8 Person.count +=1 9 10 def get_name(self):#实例方法,必须要实例化 11 return self.name 12 #类方法:可以使用类变量,不能使用实例变量 13 #通过类名来使用,类名.get_instance_count() 14 #也可以通过实例调用,实例对象.get_instance_count() 15 @classmethod 16 def get_instance_count(cls): 17 return Person.count 18 19 @classmethod 20 def create_a_instance(cls): 21 return Person("张","女") 22 23 @staticmethod #静态方法:不需要self和cls 24 def get_nation(): 25 return Person.nation 26 27 28 wulaoshi = Person("吴老师","Male") #实例化 29 30 31 #访问类变量的两种方式: 32 ''' 33 ①类名.类变量 34 ②实例名.类变量 35 ''' 36 print("类变量的调用方法:") 37 print(Person.count) 38 print(wulaoshi.count) 39 40 #访问实例变量的方法: 41 ''' 42 ①实例名.实例变量 43 ②实例化.实例变量 44 ''' 45 print("实例变量的调用方法:") 46 print(wulaoshi.name) 47 print(Person("吴老师","Male").name) 48 49 #访问实例方法的三种方式: 50 ''' 51 ①实例名.实例方法() 52 ②实例化.实例方法() 53 ③类名.实例方法(实例名) 54 ''' 55 print("实例方法的调用方法:") 56 print(Person("吴老师","Male").get_name()) 57 print(wulaoshi.get_name()) 58 print(Person.get_name(wulaoshi)) 59 #注意:实例方法是不能用类名来直接调用的 60 61 #访问类方法的两种方式: 62 ''' 63 ①类名.类方法() 64 ②实例对象.类方法() 65 ③实例.类方法() 66 ''' 67 print("类方法的调用方法:") 68 print(Person.get_instance_count()) 69 print(Person("吴老师","Male").get_instance_count()) 70 print(wulaoshi.get_instance_count()) 71 72 #访问静态方法的两种方式: 73 ''' 74 ①类名.静态方法() 75 ②实例对象.静态方法() 76 ③实例。静态方法() 77 ''' 78 print("静态方法的调用方法:") 79 print(Person.get_nation()) 80 print(Person("吴老师","Male").get_nation()) 81 print(wulaoshi.get_nation()) 82 83 84 print(Person.get_name()) #类名直接调用实例方法,会报错
E:>py -3 a.py
类变量的调用方法:
1
1
实例变量的调用方法:
吴老师
吴老师
实例方法的调用方法:
吴老师
吴老师
吴老师
类方法的调用方法:
3
4
4
静态方法的调用方法:
中国
中国
中国
Traceback (most recent call last):
File "a.py", line 84, in <module>
print(Person.get_name())
TypeError: get_name() missing 1 required positional argument: 'self'