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

霸气de小男生 提交于 2020-02-01 13:08:31

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__中定义的属性)

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!