看漫画学Python 第九章代码
作者:互联网
9.2 定义类
class Car(object):
#类体
pass
9.3 创建对象
class Car(object):
#类体
pass
car = Car()
9.4 类的成员
class Dog:
def __init__(self,name,age):
self.name = name #创建和初始化实例变量name
self.age = age #创建和初始化实例变量age
d = Dog("球球",2)
print("我们家狗狗名叫{0},{1}岁了。".format(d.name,d.age))
9.4.1 实例变量
class Dog:
def __init__(self,name,age):
self.name = name #创建和初始化实例变量name
self.age = age #创建和初始化实例变量age
d = Dog("球球",2)
print("我们家狗狗叫{0},{1}岁了".format(d.name,d.age))
9.4.2 构造方法
class Dog:
def __init__(self,name,age,sex = "雄性"): #带有默认值的构造方法,能够给调用者提供多个不同版本的构造方法
self.name = name #创建和初始化实例变量name
self.age = age #创建和初始化实例变量age
self.sex = sex #创建和初始化实例变量sex
d1 = Dog("球球",2) #创建对象调用,省略默认值
d2 = Dog("哈哈",1,"雄性")
d3 = Dog(name = "拖布",sex = "雄性",age = 3) #使用关键字参数调用构造方法
print("{0}:{1}岁{2}。".format(d1.name,d1.age,d1.sex))
print("{0}:{1}岁{2}。".format(d2.name,d2.age,d2.sex))
print("{0}:{1}岁{2}。".format(d3.name,d3.age,d3.sex))
9.4.3 实例方法
class Dog:
#构造方法
def __init__(self,name,age,sex = "雄性"): #带有默认值的构造方法,能够给调用者提供多个不同版本的构造方法
self.name = name #创建和初始化实例变量name
self.age = age #创建和初始化实例变量age
self.sex = sex #创建和初始化实例变量sex
#实例方法
def run(self): #定义实例方法,只有一个self参数
print("{}在跑...".format(self.name))
#实例方法
def speak(self,sound): #定义实例方法,第一个参数是self,第二个参数是sound
print("{}在叫,{}!".format(self.name,sound))
dog = Dog("球球",2) #创建对象调用方法,省略默认值
dog.run() #在调用时采用"对象.实例方法"。不需要传递参数
dog.speak("旺旺旺") #需要传递一个参数sound
9.4.4 类变量
class Account:
interest_rate = 0.0568
def __init__(self,owner,amount):
self.owner = owner #创建和初始化实例变量owner
self.amount = amount #创建和初始化实例变量amount
account = Account("Tony",800000.0)
print("账户名:{0}".format(account.owner)) #对实例变量通过"对象.实例变量"形式访问
print("账户金额:{0}".format(account.amount))
print("利率:{0}".format(Account.interest_rate)) #对类变量通过"类名.类变量"形式访问
9.4.5 类方法
class Account:
interest_rate = 0.0668 #类变量利率
def __init__(self,owner,amount):
self.owner = owner #创建和初始化实例变量owner
self.amount = amount #创建和初始化实例变量amount
#类方法
@classmethod #定义类方法需要的装饰器,装饰器以开头修饰函数方法和类,用来约束它们
def interest_by(cls,amt):
return cls.interest_rate * amt
interest = Account.interest_by(12000.0)
print("计算利息:{0:.4f}".format(interest))
9.5.1 私有变量
class Account:
__interest_rate = 0.0568 #类变量利率__interest_rate
def __init__(self,owner,amount):
self.owner = owner #创建并初始化公有实例变量owner
self.__amount = amount #创建并初始化私有实例变量__amount
def desc(self):
#在类的内部可以访问私有变量
print("{0} 金额:{1} 利率:{2}。".format(self.owner,
self.__amount,
Account.__interest_rate))
account = Account("Tony",800000.0)
account.desc()
print("账户名:{0}".format(account.owner))
#print("账户金额:{0}".format(account.__amount)) 发生错误
#print("利率:{0}".format(Account.__interest_rate)) 发生错误
9.5.2 私有方法
class Account:
__interest_rate = 0.0568 #类变量利率__interest_rate
def __init__(self,owner,amount):
self.owner = owner #创建并初始化公有实例变量owner
self.__amount = amount #创建并初始化私有实例变量__amount
def __get_info(self):
#定义私有方法
return "{0} 金额:{1} 利率:{2}。".format(self.owner,
self.__amount,
Account.__interest_rate)
def desc(self):
#在类的内部可以调用私有方法
print(self.__get_info())
account = Account("Tony",800000.0)
account.desc()
#account.__get_info() 在类的外部调用私有方法,则会发生错误
9.5.3 使用属性
class Dog:
#构造方法
def __init__(self,name,age,sex = "雌性"):
self.name = name #创建和初始化实例变量name
self.__age = age #创建和初始化私有实例变量__age
#实例方法
def run(self):
print("{}在跑...".format(self.name))
#get方法
def get_age(self): #定义get()方法,返回私有实例变量__age
return self.__age
#set方法
def set_age(self,age): #定义set()方法,通过参数更新私有实例变量__age
self.__age = age
dog = Dog("球球",2)
print("狗狗年龄:{}".format(dog.get_age())) #通过get()方法取值
dog.set_age(3) #通过set()方法赋值
print("修改后狗狗年龄:{}".format(dog.get_age()))
class Dog:
#构造方法
def __init__(self,name,age,sex = "雌性"):
self.name = name #创建和初始化实例变量name
self.__age = age #创建和初始化私有实例变量__age
#实例方法
def run(self):
print("{}在跑...".format(self.name))
@property
def age(self): #替代get_age(self)
return self.__age
@age.setter
def age(self,age): #替代set_age(self,age)
self.__age = age
dog = Dog("球球",2)
print("狗狗年龄:{}".format(dog.age)) #通过get()方法取值
dog.age = 3 #通过set()方法赋值
print("修改后狗狗年龄:{}".format(dog.age))
9.6.1 Python中的继承
class Animal:
#定义父类
def __init__(self,name):
self.name = name #实例变量
def show_info(self):
return "动物的名字{0}".format(self.name)
def move(self):
print("动一动...")
class Cat(Animal):
#定义子类猫
def __init__(self,name,age):
super().__init__(name) #调用父类构造方法,初始化父类成员变量
self.age = age #实例变量
cat = Cat("Tom",2)
cat.move()
print(cat.show_info())
9.6.2 多继承
class Horse:
def __init__(self,name):
self.name = name
def show_info(self):
return "马的名字:{0}".format(self.name)
def run(self):
print("马跑...")
class Donkey:
def __init__(self,name):
self.name = name
def show_info(self):
return "驴的名字{0}".format(self.name)
def run(self):
print("驴跑...")
def roll(self):
print("驴打滚...")
class Mule(Horse,Donkey):
def __init__(self,name,age):
super().__init__(name)
self.age = age
m = Mule("骡宝莉",1)
m.run() #继承父类Horse方法
m.roll() #继承父类Donkey方法
print(m.show_info()) #继承父类Horse方法
9.6.3 方法重写
class Horse:
def __init__(self,name):
self.name = name
def show_info(self):
return "马的名字:{0}".format(self.name)
def run(self):
print("马跑...")
class Donkey:
def __init__(self,name):
self.name = name
def show_info(self):
return "驴的名字{0}".format(self.name)
def run(self):
print("驴跑...")
def roll(self):
print("驴打滚...")
class Mule(Horse,Donkey):
def __init__(self,name,age):
super().__init__(name)
self.age = age #实例变量age
def show_info(self):
return "骡:{0},{1}岁。".format(self.name,self.age)
m = Mule("骡宝莉",1)
m.run() #继承父类Horse方法
m.roll() #继承父类Donkey方法
print(m.show_info()) #子类Mule自己方法
9.7.1 继承与多态
class Aniaml:
def speak(self):
print("动物叫,但不知道是哪种动物叫!")
class Dog(Aniaml):
def speak(self):
print("小狗:旺旺叫...")
class Cat(Aniaml):
def speak(self):
print("小猫:喵喵叫...")
animal1 = Dog()
animal2 = Cat()
animal1.speak()
animal2.speak()
9.7.2 鸭子类型测试与多台
class Aniaml:
def speak(self):
print("动物叫,但不知道是哪种动物叫!")
class Dog(Aniaml):
def speak(self):
print("小狗:旺旺叫...")
class Cat(Aniaml):
def speak(self):
print("小猫:喵喵叫...")
class Car:
def speak(self):
print("小汽车:滴滴叫...")
def start(obj): #接收的obj对象具有speak()方法
obj.speak()
start(Dog())
start(Cat())
start(Car())
标签:__,name,Python,self,print,第九章,漫画,age,def 来源: https://blog.csdn.net/fevipanda/article/details/123567203