隐藏属性
class Dog: def set_age(self,new_age): if new_age > 0 and new_age <=100: self.age = new_age else: self.age = 0 def get_age(self): return self.age dog = Dog() dog.set_age(-10) age = dog.get_age() print(age)
私有方法
class Dog: #私有方法 def __send_msg(self): print("----正在发送短信----") #公有方法 def send_msg(self,new_money): if new_money > 1000: self.__send_msg() else: print("余额不足,请先充值再发送短信") dog = Dog() dog.send_msg(10000)
__del__方法
class Dog: def __del__(self): print("----英雄over----") dog1 = Dog() dog2 = dog1 del dog1 #只有这一行时,先打印==,再打印over,==后没有代码,才删除引用 del dog2 #有这行时,引用会被先删除完,才打印== print("================")
对象的引用个数
import sys class T: pass t = T() print(sys.getrefcount(t)) #getrefcount(),测量一个对象引用计数时引用必须要存在一个。getrefount()还会自己占用一个。 tt = t print(sys.getrefcount(tt))
继承class Animal:
def eat(self): print("---吃---") def drink(self): print("---喝---") def sleep(self): print("---睡觉---") def run(self): print("---跑---") class Dog(Animal): def bark(self): print("---汪汪叫---") class Cat(Animal): def catch(self): print("---抓老鼠---") class Xiaotq(Dog): def fly(self): print("---飞---")
wangcai = Dog() wangcai.eat() xtq = Xiaotq() xtq.fly() xtq.bark() xtq.eat()
重写
class Animal: def eat(self): print("---吃---") def drink(self): print("---喝---") def sleep(self): print("---睡觉---") def run(self): print("---跑---") class Dog(Animal): def bark(self): print("---汪汪叫---") class Cat(Animal): def catch(self): print("---抓老鼠---") class Xiaotq(Dog): def fly(self): print("---飞---") def bark(self): #此处重写父类bark()方法 print("---狂叫---") wangcai = Dog() wangcai.eat() xtq = Xiaotq() xtq.fly() xtq.bark() #---狂叫---,调用自己的,非父类的 xtq.eat()
调用被重写的方法
class Animal: def eat(self): print("---吃---") def drink(self): print("---喝---") def sleep(self): print("---睡觉---") def run(self): print("---跑---") class Dog(Animal): def bark(self): print("---汪汪叫---") class Cat(Animal): def catch(self): print("---抓老鼠---") class Xiaotq(Dog): def fly(self): print("---飞---") def bark(self): print("---狂叫---") #第1种调用被重写父类的方法 # Dog.bark(self) #调用父类的bark(),self必须传 #第2种 super().bark() wangcai = Dog() wangcai.eat() xtq = Xiaotq() xtq.fly() xtq.bark() #---狂叫---,调用自己的,非父类的 xtq.eat()
私有方法、私有属性在继承中的表现
如果调用的是继承父类中的公有方法,可以在这个公有方法中访问父类中的私有属性和私有方法
但是如果在子类中实现了一个公有方法,那么这个方法不能够调用继承的父类中的私有方法和私有属性
class A: def __init__(self): self.num1 = 100 self.__num2 = 200 def test1(self): print("---test1---") def __test2(self): print("---test2---") def test2(self): self.__test2() print(self.__num2) def test3(self): self.__test2() print(self.__num2) class B(A): def test4(self): self.__test2() print(self.num2) b = B() b.test1() # b.__test1() #私有方法不会被继承 print(b.num1) # print(b.__num2) #私有属性不能被继承 b.test3() b.test4() #调用报错
原文:https://www.cnblogs.com/rongpeng/p/12514753.html