class Test: num=100 def __init__(self): self.age=18 test1=Test() test2=Test() print(test1.num) test1.num=200 """ 只是修改了这个对象作用域下的属性 类中的num不会发生改变 """ print(test1.num) print(Test.num) del test1.num print(test1.num)
def __init__方法的作用域限制在实例化出的对象
self.age=18
这里的age属性是对象的特有属性,类访问不到
跟 p=person()
p.age=18
是一样的效果
只有p能访问到这个age,person访问不到
如果person中也有这个age,是在两个区域,互不影响
除非在p中的age属性删除之后,p会向person中找相关的属性
class a: def __init__(self): self.name="a" self.age=12 self.score=23 def test(): print("类方法测试") print(a.name) """ 这里会报错,因为def __init__构造函数之内的属性只能通过 实例化对象之后,通过对象进行访问,类没有办法直接访问 如果是对象中再增加属性,或者修改属性的值,这些都跟类的属性没有关系 因为两种属性是在两个区域内创建的 """ a.test()
对于类:
类可以直接访问类属性
类不可以直接访问实例方法,必须通过实例化之后的对象来访问实例方法
类不可以访问对象特有的属性(比如:def __init__中定义的属性)
类可以直接访问类方法
类可以直接访问静态方法
所以存在:如果对象中的属性跟类中的属性相同,改变对象中的属性值,不会影响类中的属性值
对于对象:
对象可以直接访问类的属性(实例化过程中,类已经将属性赋给对象)
对象可以直接访问自己私有的属性
对象可以直接访问类方法
对象可以直接访问静态方法
- 对象可以直接访问实例方法
class a: def __init__(self,name): self.name=name print(self.name) age="这是类属性" def test(self): self.name="name已经修改" self.age="age已经修改" print(self.age) print(self.name) a1=a("这是对象属性") print(a.age) print(a1.name) print(a1.age) a1.test()
这里所有的带有self的方法都是实例方法,只能由对象才能访问到,且实例方法中可以访问对象的属性。
来源:https://www.cnblogs.com/python99/p/12248107.html