python中的类属性和对象属性的作用域

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()

对于类:

1.类可以直接访问类属性

2.类不可以直接访问实例方法,必须通过实例化之后的对象来访问实例方法

3.类不可以访问对象特有的属性(比如:def __init__中定义的属性)

扫描二维码关注公众号,回复: 5675272 查看本文章

4.类可以直接访问类方法

5.类可以直接访问静态方法

所以存在:如果对象中的属性跟类中的属性相同,改变对象中的属性值,不会影响类中的属性值

对于对象:

1.对象可以直接访问类的属性(实例化过程中,类已经将属性赋给对象)

2.对象可以直接访问自己私有的属性

3.对象可以直接访问类方法

4.对象可以直接访问静态方法

5.对象可以直接访问实例方法

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

猜你喜欢

转载自blog.csdn.net/chengchaonan/article/details/83751824