python 面向对象

class Animal():
    animal_num = 0
    def __init__(self):
        print("父类构造方法")
        Animal.animal_num += 1
        
    def animal_method(self):
        print("调用父类方法")
        
    def set_animal(self, animal_num):
        Animal.animal_num = animal_num
        
    def my_method(self):
        print("这是父类的my_method")
class Cat(Animal):
    cat_num = 0 # 类变量
    def __init__(self, name, a, b):
        print("子类构造方法")
        self.name = name #  成员变量 -- 公有
        self.a = a #  成员变量 -- 公有 
        self.__b = b #  成员变量 -- 私有
        Cat.cat_num += 1
        
    def add_a(self, add):
        self.a += add
        
    def add_b(self, add):
        self.__b += add
        
    def show_cat(self):
        print("name: %s   a: %d   self.__b: %d    Cat.cat_num: %d" %(self.name, self.a, self.__b, Cat.cat_num))
        
    def my_method(self):
        print("这是子类的my_method")
              
    
cat1 = Cat("cat1", 1, 3)
cat1.show_cat() # name: cat1   a: 1   self.__b: 3    Cat.cat_num: 1
print(Animal.animal_num) # 0
cat2 = Cat("cat2", 4, 6)
cat2.show_cat() # name: cat2   a: 4   self.__b: 6    Cat.cat_num: 2
print(Animal.animal_num) # 0

cat1.add_a(1)
cat1.add_b(1)
cat2.add_a(-1)
cat2.add_b(-1)

cat1.show_cat() # name: cat1   a: 2   self.__b: 4    Cat.cat_num: 2
cat2.show_cat() # name: cat2   a: 3   self.__b: 5    Cat.cat_num: 2

# print(cat1.__b) # 不能从外部访问 'Cat' object has no attribute '__b'
# print(cat2.__b) # 不能从外部访问 'Cat' object has no attribute '__b'

cat1.set_animal(100)
print(Animal.animal_num) # 100
cat2.set_animal(200)
print(Animal.animal_num) # 100

cat1.animal_method() # 调用父类方法

animal = Animal()
animal.my_method() # 这是父类的my_method
cat1.my_method() # 这是子类的my_method
cat2.my_method() # 这是子类的my_method
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值