两种变量
# 定义类可以加`()`,也可以不加`()`,如果不加`()`,就是`新式类`
class User:
# 成员变量
name = 'lixingyun'
age = 19
# 定义实例变量
def __init__(self, gender, address):
self.gender = gender
self.address = address
print("访问实例变量 ==>", self.name)
# 只能通过以下两种方式访问成员变量
print("访问成员变量方式一 ==>", User.name)
print("访问成员变量方式二 ==>", self.__class__.name)
# 打印类的成员变量
user = User('male', 'beijing') # print("访问实例变量 ==>", self.name)
# 访问成员变量方式一 ==> lixingyun
# 访问成员变量方式二 ==> lixingyun
print(User.name, User.age) # lixingyun 19
print(user.name, user.age) # lixingyun 19
# 类修改成员变量的值,值会改变
User.name = 'wanglin'
User.age = 20
print(User.name, User.age) # wanglin 20
print(user.name, user.age) # wanglin 20
# 实例修改成员变量的值,成员变量的值不会改变,但实例变量的值会变
# 赋值时会给实例user创建两个新的变量 name 和 age
user.name = '唐三'
user.age = 30
print(user.name, user.age) # 唐三 30
print(User.name, User.age) # wanglin 20
# 打印类的实例变量
print(user.gender, user.address) # male beijing
# 修改实例变量的值
user.gender = 'female'
user.address = 'shanghai'
# 再次打印类的实例变量
print(user.gender, user.address) # female shanghai
# 实例对象可以访问类的成员变量,但类不能访问实例对象的实例变量,否则会报错
# print(User.gender, User.address)
# 总结:
# 1. 成员变量属于类,实例变量属于实例
# 2. 类修改成员变量后,当实例访问它时,访问的是改变后的值
# 3. 实例修改成员变量时,python会给它创建一个新的同名的本地实例变量,并赋值给它
# 查看类的成员变量和实例的实例变量之间的不同
print("实例user.__dict__ ==>", user.__dict__) # 实例user.__dict__ ==> {'gender': 'female', 'address': 'shanghai', 'name': '唐三', 'age': 30}
print("类User.__dict__ ==>", User.__dict__) # 类User.__dict__ ==> {'__module__': '__main__', 'name': 'wanglin', 'age': 20, '__init__': <function User.__init__ at 0x7fdeb801ec10>, '__dict__': <attribute '__dict__' of 'User' objects>, '__weakref__': <attribute '__weakref__' of 'User' objects>, '__doc__': None}
大约 18 分钟