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的方法都是实例方法,只能由对象才能访问到,且实例方法中可以访问对象的属性。