










__(双下划线),即变成私有变量。
__(双下划线),即变成私有方法。
为了实现对象的封装,一个类中,不该有公有的成员变量,这些成员变量都应该设为私有的,然后通过公有的set和get方法访问。
class Dog():
def __init__(self, name, age, sex="雄性"):
self.name = name
self.__age = age
self.sex = sex
def run(self):
print("{}在跑...".format(self.name))
# 定义get()方法,返回私有实例变量__age
def get_age(self):
return self.__age
# 定义set()方法,通过age参数更新私有实例变量__age
def set_age(self, age):
self.__age = age
d = Dog("球球",3)
print("我们家狗{}岁了".format(d.get_age()))
d.set_age(4)
print("我们家狗{}岁了".format(d.get_age()))
返回结果

以上,是定义了两个公有方法,访问被封装的私有成员变量的。另外一种方法如下
class Dog():
def __init__(self, name, age, sex="雄性"):
self.name = name
self.__age = age
self.sex = sex
def run(self):
print("{}在跑...".format(self.name))
# # 定义get()方法,返回私有实例变量__age
# def get_age(self):
# return self.__age
@property
def age(self):
return self.__age
# # 定义set()方法,通过age参数更新私有实例变量__age
# def set_age(self, age):
# self.__age = age
@age.setter
def age(self, age):
self.__age = age
d = Dog("球球",3)
print("我们家狗{}岁了".format(d.age))
d.age = 4
print("我们家狗{}岁了".format(d.age))
运行结果

本质上就是,在方法前面加上装饰器,使其成为属性,用起来类似公有变量。
class Animal:
def __init__(self, name):
self.name = name
def show_info(self):
return "动物名字:{0}".format(self.name)
def move(self):
print("移动ing")
# 子类定义
class Cat(Animal):
def __init__(self, name, age):
# 使用super()方法调用父类构造方法,初始化父类成员变量
super().__init__(name)
self.age = age
cat = Cat("tom",4)
cat.move()
print(cat.show_info())


class Horse:
def __init__(self, name):
self.name = name
def show_info(self):
return "马的名字:{0}".format(self.name)
def move(self):
print("马在跑...")
class Donkey:
def __init__(self, name):
self.name = name
def show_info(self):
return "驴的名字:{0}".format(self.name)
def move(self):
print("驴在跑...")
def roll(self):
print("驴在滚...")
class Mule(Horse, Donkey):
def __init__(self, name, age):
super().__init__(name)
self.age = age
m = Mule("tom",10)
# 继承马的run(继承时马在左边)
m.move()
# 继承驴的roll
m.roll()
# 同理,继承马的show_info
print(m.show_info())

class Horse:
def __init__(self, name):
self.name = name
def show_info(self):
return "马的名字:{0}".format(self.name)
def move(self):
print("马在跑...")
class Donkey:
def __init__(self, name):
self.name = name
def show_info(self):
return "驴的名字:{0}".format(self.name)
def move(self):
print("驴在跑...")
def roll(self):
print("驴在滚...")
class Mule(Horse, Donkey):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def show_info(self):
return "骡的名字是:{0},{1}岁".format(self.name, self.age)
m = Mule("tom",10)
# 继承马的run(继承时马在左边)
m.move()
# 继承驴的roll
m.roll()
# 子类自身定义的方法
print(m.show_info())

class Animal:
def speak(self):
print("叫起来,啥玩意叫?")
class Dog(Animal):
def speak(self):
print("小狗,旺。。。")
class Cat(Animal):
def speak(self):
print("小猫咪,喵。。。")
ca = Cat()
do = Dog()
ca.speak()
do.speak()

# 定义函数,接收所有的speak()方法对象
def start(obj):
obj.speak()
class Animal:
def speak(self):
print("叫起来,啥玩意叫?")
class Dog(Animal):
def speak(self):
print("小狗,今年旺不旺,旺。。。")
class Cat(Animal):
def speak(self):
print("小猫咪,别骂人呀,喵。。。")
def strat(obj):
obj.speak()
start(Dog())
start(Cat())
