Python——oop04

1.介绍一下property,他可以将一个方法转换为一个属性(注意属性和方法函数不要相同)

class fun():
    @property
    def get_age(self):
        return self.age


    @get_age.setter
    def get_age(self,age):
        self.age=age


t=fun()
t.get_age=12#相当于调用t.get_age(12)
print(t.get_age)#相当于调用了t.get_age
#但是这里要注意这个调用顺序,只有有了age这个变量才能访问它

廖雪峰老师的解释      可以看一下这个网址,他肯定比我解释的好 ,但是我希望你们不要放弃我

在介绍一下property的另一种方法  廖老师没有讲到

class Person():
    def fget(self):
        return self._name * 2
    def fset(self, name):
        # 所有输入的姓名以大写形式保存\n",
        self._name = name.upper()
    def fdel(self):
        self._name = None
    name = property(fget, fset, fdel, "name进行下下操作啦")


t=Person()
t.name='luojaijnyi'
print(t.name)
t.name1="xiaoyihao"
print(t.name1)

这个里面与两个坑

1.就是在类里面name这个变量前面必须有一个下划线

2.就是它只是针对name这个变量有这样的操作  比如说name1就不行  ,但是也可以让name1拥有同样的功能

class Person():
    def fget(self):
        return self._name * 2
    def fset(self, name):
        # 所有输入的姓名以大写形式保存\n",
        self._name = name.upper()
    def fdel(self):
        self._name = None
    name = property(fget, fset, fdel, "name进行下下操作啦")
    name1 = property(fget, fset, fdel, "name进行下下操作啦")

t=Person()
t.name='luojaijnyi'
print(t.name)
t.name1="xiaoyihao"
print(t.name1)

2.类的内置属性举例

class  fun():
    '''
    我是一个好孩子
    '''
    pass

t=fun()
print(fun.__name__)
print(t.__dict__)
print(fun.__bases__)
print(t.__doc__)

3.介绍两个魔法函数(魔法函数就是像__init__ 那样在特定的时刻会自己调用)

# 类的常用常用魔法函数
class  fun():
    def __init__(self):
        print("在创建对象的时候会自动调用")

    def  __str__(self):
        return "可以将对象当做字符串使用"

    def __call__(self):
        print("当对象被当做函数的时候触发")


a=fun()
a()
print(a)

类里面有__str__这个函数,就可以把这个类的对象当成一个字符串来使用

类里面有__call__这个函数就可以将这个类的对象当成一个函数来使用

再来一个魔法函数        __getattr__   这个函数是在对象没有这个属性的时候触发调用,记住是属性而不是成员方法,如果你使用一个未定义得 成员函数会直接报错

class A():
    name = "NoName"
    age = 18
    def __getattr__(self, name):#这个函数比较特殊
        print("没找到呀没找到")
        print(name)
a = A()
print(a.name)
print(a.addr)#a这个对象会作为第一个参数传给self addr会作为第二个参数传给参数列表中的name

注意到上面一段代码里面的最后面   print(a.adrr)   这段代码会触发魔法函数 __getattr__  然后在这个函数里面没有返回值,然后你又print 他,结果里面会出现一个None,类似于下面的道理

def fun():
    print("记住我这个函数没有返回值")

print(fun())#因为没有返回值,所以会打印一个None

猜你喜欢

转载自blog.csdn.net/qq_40794602/article/details/80327047
今日推荐