Python类属性和对象属性

来自CloudWiki
跳转至: 导航搜索

类属性

类属性:

在类中我们可以定义一些属性:

class Person:
    name = 'james'
    age = 12

通过下面的两钟方法来读取访问:

(1) 使用类的名称,例如Person.name,Person.age;

(2) 使用类的实例对象,例如 p=Person()是对象,那么p.name,p.age;

class Person:
    name="xxx"
    age=20
#用类名称读取类属性
print(Person.name,Person.age)
#用类名称改变类属性
Person.name="yyy"
Person.age=21
print(Person.name,Person.age)

结果:

xxx 20
yyy 21

用对象名称读取类属性:

class Person:
    name="xxx"
    age=20
p=Person()
#用对象名称读取类属性
print(p.name,p.age)



结果:

xxx 20

修改类的属性

修改类的属性就必须使用类名称访问它,不能使用对象实例访问它

class Person:
    #定义了一个属性
    nation = 'China'
    province = 'Shandong'
    
    #定义了一个方法
    def printNation(self):
        print(self.nation)

if __name__ == '__main__':
    
    p=Person()
    print(Person.nation,Person.province)

    print(p.nation,p.province)
    p.printNation()
    p.nation = "Russia"
    print(Person.nation,Person.province)
    Person.nation = "Russia"
    print(Person.nation,Person.province)
    


实例属性

实例有结合任何属性的功能

对象实例.属性=....

如果该对象实例存在这个属性,这个属性的值就被改变;

如果不存在该属性就会自动为该对象实例创建一个这样的属性。


class Person:
    #定义了一个属性
    nation = 'China'
    province = 'Shandong'
    
    #定义了一个方法
    def printNation(self):
        print(self.nation)

if __name__ == '__main__':
    
    p=Person()
    #打印类的属性
    print(Person.nation,Person.province)
    #打印实例的属性
    print(p.nation,p.province)
    
    #改变实例的属性
    p.nation = "Russia"
    #给实例添加属性
    p.gender ='male'
    print(p.nation,p.province,p.gender)
    print(Person.nation,Person.province)

    #改变类的属性
    Person.nation = "USA"
    print(p.nation,p.province)
    print(Person.nation,Person.province)


结果:

xxx 20
yyy male 20
xxx 20

(1)p.nation="yyy"

这条语句生成p实例的name属性,它不同于Person的name属性


(2)p.gender="male"

这条语句生成p实例的gender属性,这是新加的,Person没有gender属性。