首页 > 其他 > 详细

面向对象-2

时间:2020-03-18 00:29:58      阅读:75      评论:0      收藏:0      [点我收藏+]

隐藏属性

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() #调用报错

 

面向对象-2

原文:https://www.cnblogs.com/rongpeng/p/12514753.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!