编程语言
首页 > 编程语言> > 看漫画学Python 第九章代码

看漫画学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