前言
初学Python面向对象时,虽然学过Java,想着已经接触过面向对象思维了,上手这节应该很快就过了,但马上就发现自己还是too young too simple。不过幸好在经历了一番挣扎之后,终于弄懂了这一切,接下来分享一下自己学_init_方法与self参数的心得。
Python类所包含的最重要的两个成员就是变量和方法,其中类变量属于类本色,用于定义该类本身所包含的状态和数据;而实例变量则属于该类的对象,用于定义对象所包含的状态数据;方法则用于定义该类的对象的行为或功能实现。
在类中定义的方法默认是实例方法,定义实例方法的方法与定义函数的方法基本相同,只是实例方法的第一个参数会被绑定到方法的调用者(该类的实例)——因此实例方法至少应该定义一个参数,该参数通常会被命名为self(默认命名)“实例方法的第一个参数不一定要叫self,只是约定俗成的把这个参数命名为self,这样具有最好的可读性”。
话不多说,代码奉上
class Car(): # 创建一个类,类的名称为Car,通常按规范,类的名称首字母大写
'''汽车目前价值估计程序'''
def __init__(self, make, model, year):
# 当类Car被创建一个对象时,Python会自动运行该方法
# 下划线是一种约定,避免Python默认的方法与普通方法名称冲突
# self必不可少,且必须位于其他形参的前面,可以用来保存参数
self.make = make
self.model = model
self.year = year
def detection(self):
# 方法detection
duration = 2018-self.year # 持续时间
price = 30-2*duration
long_name = "你的"+self.make+self.model \
+"到目前已经行驶了"+str(duration)\
+"年,"+"目前价值"+str(price)+"万"
return long_name
my_car = Car("Audi"," A4", 2013)
print(my_car.year)
result = my_car.detection()
print(result)
your_car = Car("奔驰"," c200", 2012)
result = your_car.detection()
接下来我们来解析一下这些代码,我们创建了一个Car类,里面有一个_init_()方法,这就相当于Java里面的构造器,只不过Java里面在构造器里面就传入的参数,Python中专门有一个构造器来传参,第一个参数self可以理解为Car本身,代码里面的self.make = make和Java里面的参数传递类似,此处这么写的目的,就是把各个参数存入self中,也就是实例化的对象之中,使对象有了make,model,year等属性,后面的方法detection中传入了self也就是这个对象本身,在其方法中,就可以对Car中的year,make等属性进行操作了。
这样操作的好处:保存参数。众所周知,函数的参数只能在函数内部使用,但我们使用self,就可以把self传入其他函数,其他函数也就可以使用传入self里面的参数了。
初次上手Python,如有解析错误,希望得到大佬们的指导。