Python中的类属性,类方法与实例属性,实例方法

class Person(object):
    num=10000
    def __init__(self,name):
        self.name=name
    @classmethod
    def getNum(cls):
        return cls.num
    def getName(self):
        return self.name
p=Person("张三”)
p.age=12

1、类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,上面这段代码中,num为类属性。
2、name和age这种在__init__方法中添加的属性或通过实例对象名添加的属性为实例属性。
3、类方法就是加上 @classmethod注解的方法,如getNum方法,它的第一个参数必须是当前类对象(一般写成cls,但不是必须为cls)。
4、实例方法就是不加@classmethod注解的方法,如getName方法,它的第一个参数必须是当前实例对象(一般写成self,但不是必须为self)。
5、类属性被所有该类的实例对象所共有,实例对象(非私有)和实例对象的方法可以访问类属性,但是不能进行修改,若修改则是在当前实例对象中添加一个与类属性同名的实例属性,所以类属性对于实例方法和实例对象是只读。

class Person(object):
    num=10000
    def __init__(self,name):
        self.name=name
    @classmethod
    def getNum(cls):
       #print(self.name)   #类方法不能访问实例属性
        print(cls.num)
    def getNum1(self):
        print(self.num)
        self.num=10
        print(self.num)
p1=Person("张三")
p2=Person("李四")
p1.getNum1()
p2.getNum()

在这里插入图片描述
6、类方法不能访问实例属性

class Person(object):
    num=10000
    def __init__(self,name):
        self.name=name
    @classmethod
    def getNum(cls):
        print(cls.name)   #类方法不能访问实例属性
        print(cls.num)

p1=Person("张三")
p1.getNum()

在这里插入图片描述
cls代表Person类对象,因为Person类对象中没有name属性,name属性在实例对象self中。

猜你喜欢

转载自blog.csdn.net/weixin_41557802/article/details/84197099