今天学了很多知识。也有很多疑惑。

小盆友你是否有很多???

 

part9:

第九章  类

#part 9 第九章  类
#1.创建和使用类
class Phones():
	'''手机类'''
	def __init__ (self,brand,type):
		self.brand=brand
		self.type=type
#等号右边是参数
	def turnon(self):
		'''开机'''
		print(self.brand.title(),self.type.title(),'waiting... welcome')
	def turnoff(self):
		'''关机'''
		print(self.brand.title(),self.type.title(),' byebye')
		
#方法 __init__()  *类中的函数称为方法  也是调用时需要加点 ‘.’
#每当你根据phones类创建新实例时,__init__这个函数都会自动运行
#self形参不能少,而且必须在最前面  python调用__init__()方法来创建实例时,将自动传入实参self。
#每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
#创建实例时,不需要传递self

my_phone=Phones('xiaomi','android')
his_phone=Phones('banana','ios')
#访问属性
print('my phone is a',my_phone.brand,'machine.')
print('and its ',my_phone.type,'system.')
print('----------------------------------------------')
#调用方法
my_phone.turnon()
my_phone.turnoff()
his_phone.turnoff()
his_phone.turnon()

#2.使用类和实例
#给属性指定默认值 类中每个属性都必须有初始值
class fruits():
	def __init__(self,name,color,taste):
		self.color=color
		self.taste=taste
		self.name=name
		self.totally=0     #here
	def numdatas(self):
		print(self.name,' number r totally ',self.totally)
	def waytochange(self,num):
		self.totally+=num
	def  example(self):
		print('父类的方法,输出name:',self.name)

my_fruit=fruits('banana','yellow','sweety')
my_fruit.numdatas()
#修改属性的值,直接法
my_fruit.totally=666
my_fruit.numdatas()

#通过方法对属性的值进行递增  上面的waytochange方法
my_fruit.waytochange(10)
my_fruit.numdatas()

#3.继承
#创建子类时,父类必须包含在当前文件中,且位于子类前面
#定义子类时,括号内指定父类  子类继承父类的所有属性和方法
class hotfruits(fruits):
	def __init__(self,na,co,ta):#初始化弗父类属性
		super().__init__(na,co,ta)#super()是一个特殊函数,他可以子类的实例包含父类所有属性
		#这里的init后面的括号里跟的是子类形参
		self.place='in hot place'  #专属于子类的属性
	def outplace(self,x,y):
		print(self.name,'made in',self.place,'经纬坐标:',str(x)+','+str(y))
	def example(self):
		print('子类重写,输出1+1+1:',1+1+1)
mango=hotfruits('mango','yellow','0sweety')
mango.numdatas()
mango.waytochange(20)
mango.numdatas()
#定义专属一某子类的属性方法
mango.outplace(233,8)#不能用03、045、这样0开头的数字,报错
#重写父类的方法
#只是更改方法内部,不该参数
mango.example()

#将实例用作属性 
#我觉得教材这个小标题用的...虽然形象,但是属于不好理解的形象
#我的理解是把一个大类拆分成几个小类(有相似特征或有关系)
#或者是子类自己的专属方法太多,使得子类冗杂,便把一些方法重新归成一类
#子类继承时self().__init__(参数)继承父类属性和方法,再self.xxx=第二个类();
#我不知道这和多重继承有什么关系  这个self.xxx=类()是只拥有类的方法?
class place():
	def __init__(self,place='southern'):
		self.place=place

	def returnplace(self,x,y):
		print('产地:',self.place,'坐标:',str(x)+','+str(y))
class hotfruit2(fruits):
	def __init__(self,a,b,c):
		super().__init__(a,b,c)
		self.useplace=place() #这里place的括号里可以加hotfruit的init的参数,会传到place的init参数
liulian=hotfruit2('liulina','yellow','smelly')
liulian.waytochange(1)
liulian.numdatas()
liulian.useplace.returnplace(202,10)
		
#4.导入类
#导入单个类
import name from Class  #从name.py中导入Class类
#导入多个类
import name from Class1,Class2  #从name.py中导入Class1、Class2....
#导入整个模块
import name  #name.py中所有的类都可以用
#导入模块中的所有类
import name from*  #其实这都和跨模块函数的调用那里是一样的
#类的模块之间也可以导入类
#到此为止了....