chzhiyi / -KnowledgeShare

6 stars 1 forks source link

20190424 - python面向对象property属性的应用及new方法应用 - huasheng #59

Open huashengcaicai opened 5 years ago

huashengcaicai commented 5 years ago

类的私有属性,如果在外部访问的话,需要在类中定义get和set方法

在类的外部可以调用get和set方法进行访问和修改,这里引用property属性,会更高效,简洁

class Person(object):

    def __init__(self):
        self.__age = 18
    @property  #通过property这个属性对age提供getattr方法
    def age(self):
        return self.__age #通过实例化的方法调用私有属性,进行访问
    @age.setter #使用装饰器,提供一个settr方法
    def age(self,age):

        if age < 0:
            print('年龄是不可以小于0的')
        else:
            self.__age = age
    # age = property(get_age,set_age)

# huasheng = Person()
# res = huasheng.get_age()
# print(res)
# huasheng.set_age(100)
# res = huasheng.get_age()
# print(res)

huasheng = Person()
huasheng.age = 89
print(huasheng.age)

python中new方法的应用

init方法和new方法的区别,new方法是类级别的方法,而init方法是实例对象方法

init方法需要在实例化对象产生的基础才会被调用,new方法是生成一个实例化对象,所以要先执行new方法且要返回实例化对象,这时才会调用init方法。

class A(object):
    def __init__(self):
        print('init方法被执行')
        print(a)

    # new方法是用来创建实例对象的,必须返回一个实例对象,调用了父类的方法,返回给它
    def __new__(cls,*args,**kwargs):
        print('new方法被执行')
        return object.__new__(cls)
a=1

b = A()