今天学了很多知识。也有很多疑惑。
小盆友你是否有很多???
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* #其实这都和跨模块函数的调用那里是一样的
#类的模块之间也可以导入类
#到此为止了....