系列
前文:选择困难与PyCharm初体验
后篇:列表与切片,边学边刷LeetCode
序:对Python一无所知的作者竟然开了这个系列…长话短说,学Python的第二天,既然是面向对象的语言,那就面向对象吧!…Emmm…对象在哪?
P.s:学艺不精,请大佬们多多点拨:)
对象
作为一门面向对象的语言,那就必须来学一下怎么找个对象!…怎么来写一个对象。
class Coach:
CoachName = "教练" #公共变量
__weight = 100 #开头两个下滑线代表私有 变量与方法都可以加两个下滑线来表示私有
def __init__(self,name:str): #构造函数,self不是关键字,可以是其他任何命名
self.CoachName = name # 赋值操作,操作的都是实例而不是类,所以要用self.
def speak(self): # def 是声明函数的关键字
print("%s:小伙子,你有对象吗?"%self.__class__.CoachName) # 使用类本身的变量,不是实例
def agree(self):
print("%s:行吧行吧,找不到对象至少你能创建一个了吧"%self.CoachName)
class LiuChuanFeng(Coach): # 继承
Name = "流川枫"
def __init__(self): #继承后构造函数中需要对父级进行初始化(如果父级有需要的情况)
Coach.__init__(self,"教练")
def speak(self): #父级方法的重写
print("%s:八嘎"%self.Name)
def agree(self):
print("%s:Zzz...."%self.Name)
def coachAgree(self):
super(LiuChuanFeng, self).agree() #子类调用父级被重写的方法
class Adream:
state = "这是一个梦"
class YingMuHuaDao(Coach,Adream): #多重继承
def __init__(self):
Coach.__init__(self,"教练")
def dreaming(self):
print("%s(%s):哈哈哈,你俩都被我继承了!"%(Name,Adream.state))
# 运行时从这里开始
coach = Coach("胖子") #创建对象实例
liuChuanFeng = LiuChuanFeng()
Name = "樱木花道"
print("%s:%s你是哪个?"%(Name,coach.CoachName))
coach.speak()
print("%s:你为啥这么高级的speak,我就会Print"%Name)
liuChuanFeng.speak()
print("%s:教练,我想学Python!"%Name)
liuChuanFeng.agree()
liuChuanFeng.coachAgree()
me = YingMuHuaDao()
me.dreaming()
总结
Python3的面向对象非常的简单,而且取别于C#它可以实现多继承。
容易混淆的地方在于self的使用,在类里面,方法中所有的赋值操作一般都是针对于实例来言的,所以一定要使用self.Name = XXX
这样来赋值,而不是Name = XXX
,这个初学者很容易错(别问我怎么知道的)
继承会继承方法与属性,若执行了父级的方法存在对属性的改变,则其实是在改变子级对象中的属性值
class Coach():
Name = "教练"
def __init__(self,name:str):
self.Name = name
class LiuChuanFeng(Coach):
Name = "流川枫"
def __init__(self):
# 在Coach的初始化方法中对Name进行了赋值,这里的self其实是LiuChuanFeng的实例
Coach.__init__(self,"教练")
print(self.Name) # 输出为 教练
.
.
.
.
.
嗨,我是作者Vin129,逐儿时之梦正在游戏制作的技术海洋中漂泊。知道的越多,不知道的也越多。希望我的文章对你有所帮助:)