您的位置: 网站首页> python面向对象> 当前文章
类属性、类方法、实例属性、实例方法的区别
老董-我爱我家房产SEO2020-10-05177围观,110赞
深入一点学习类和面向对象,必须有1个意识:
类有类的内存空间,每个对象有自己的内存空间,只有具备这个常识才能理解面向对象一些行为。
# -*- coding:utf-8 -*- class Person: def __init__(self,my_name,my_age): self.name = my_name # 实例变量 self.age = my_age # 实例变量 def sleep(self): print('打怪累了,睡一会') if __name__ =="__main__": p = Person('老董',30) Person.sleep(p) # 等价于 p.sleep() p.sleep()
打怪累了,睡一会 打怪累了,睡一会
类属性和实例属性
从表达意义上说,类属性是用来描述整个类(比如人类的数量),实例属性是描述单个对象的(每个人的name、age等)。
1)在类中定义,但是定义在类里面各种方法之外的变量,称为类属性或类变量。
2)在类里面的方法内部以self.xxx的方式定义的变量,称为实例属性或实例变量,用(对象.变量名)调用。
3)类变量为每个对象所共享,类变量可用(类名.类变量名)或者(对象.类变量名)调用。每个对象内部有指针指向自己所属的类,1个对象调用属性时对象内部没有就会去类里寻找。
# -*- coding:utf-8 -*- class Person: count = 0 # 类属性 def __init__(self,my_name): self.name = my_name # 实例变量 Person.count += 1 # 类名调用类属性 place = '地球' # 类属性 if __name__ =="__main__": p_objs = [] for i in range(5): p = Person(f'老董{i}') p_objs.append(p) print(f'现有{Person.count}个人') # 类调用类属性 print(f'现有{p_objs[0].count}个人') # 对象调用类属性 print(Person.place)
现有5个人 现有5个人 地球
类方法和实例方法
1)实例方法最少包含一个参数,通常命名为self,self代表对象本身。类方法最少也包含一个参数,通常命名为cls,cls代表类本身,类方法需要使用@classmethod进行修饰。
2)实例方法通常用对象调用(对象.方法名),类方法通常用类名调用(类名.类方法名)
3)每个对象内部有指针指向自己所属的类,故而对象可以调用类方法(尽量避免这么做),类也有方式调用对象的方法(但是没有必要这么做)。
# -*- coding:utf-8 -*- import random class Person: count = 0 def __init__(self,my_name,my_age): self.name = my_name # 实例变量 self.age = my_age # 实例变量 Person.count += 1 # 类名调用类属性 # 实例方法 def attack (self,num): print(f'{self.name}进攻了{num}米') # 类方法 @classmethod def belief(cls): print('我们的信念:勇往直前') if __name__ =="__main__": p_objs = [] for i in range(1,3): p = Person(f'老董{i}',30) p_objs.append(p) print(f'现有{Person.count}个人') Person.belief() # 类方法 for p in p_objs: p.attack(random.randint(1,5))
现有2个人 我们的信念:勇往直前 老董1进攻了2米 老董2进攻了1米
很赞哦!
python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群
相关文章
文章评论
-
类属性、类方法、实例属性、实例方法的区别文章写得不错,值得赞赏