foo

Day2面向对象进阶

ⅰ亾dé卋堺 提交于 2019-11-26 12:08:01
访问可见性问题 在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头,下面的代码可以验证这一点。 # 私有变量,变量名前面加"__" # 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字. # 私有变量/函数,在类内部可以直接调用. # 如果你想体现一个变量/函数特别重要你可以使用"_" class Test: def __init__(self, foo): self.__foo = foo def __bar(self): print(self.__foo) print('__bar') def main(): test = Test('hello') # AttributeError: 'Test' object has no attribute '__bar' test.__bar() # AttributeError: 'Test' object has no attribute '__foo' print(test.__foo) if __name__ == "__main__": main() @property装饰器 使用装饰器的时候,需要注意: 1. 装饰器名,函数名需要一致. 2. property需要先声明,再写setter,顺序不能倒过来 3.

面向对象super 练习

感情迁移 提交于 2019-11-26 09:02:07
看代码写结果【如果有错误,则标注错误即可,并且假设程序报错可以继续执行】 class Foo(object): a1 = 1 def __init__(self,num): self.num = num def show_data(self): print(self.num+self.a1) obj1 = Foo(666) obj2 = Foo(999) print(obj1.num) print(obj1.a1) obj1.num = 18 obj1.a1 = 99 print(obj1.num) print(obj1.a1) print(obj2.a1) print(obj2.num) print(obj2.num) print(Foo.a1) print(obj1.a1) 结果: 666 1 18 99 1 999 999 1 99 看代码写结果,注意返回值。 class Foo(object): def f1(self): return 999 def f2(self): v = self.f1() print('f2') return v def f3(self): print('f3') return self.f2() def run(self): result = self.f3() print(result) obj = Foo() v1 = obj.run()