self是什么
class相当于房子图纸,每个对象是参照图纸建立的实际的房子,self相当于每一栋房子的门牌号,在下面这段代码里,每个对象都是调用了自己那栋房子里的方法,就是因为self
tips:在方法里,self必须是第一个
class Build():
def setname(self,name):
self.name = name
def call(self):
print("your name is %s" % self.name)
building1 = Build()
building1.setname("white house")
building2 = Build()
building2.setname("black house")
building1.call()
building2.call()
python的魔法方法
如果你的对象实现了魔法方法中的某一个,这个魔法方法就会在特殊的情况下被python所调用
tips:此类魔法方法会被双下滑线所包围
class Build():
def setname(self,name):
self.name = name
def call(self):
print("your name is %s" % self.name)
building1 = Build()
building1.setname("white house")
building2 = Build()
building2.setname("black house")
building1.call()
building2.call()
class Build():
def __init__(self,num): #redefine class make it add a parameter
self.num = num
def kick(self):
print("your num is %s" % self.num)
building3 = Build(3) # new object
building3.kick() # call method
公有和私有
对象的属性和方法都是公有的,在python中定义私有变量只要在变量名或函数名前加“__”两个下划线,那么这个变量或函数就会变成私有的了,例子如下
class person():
name = "carl"
a = person()
print(a.name)
carl
class person():
__name = "carl"
a = person()
print(a.name)
AttributeError: 'person' object has no attribute 'name'
想要调用则需在类内进行调用,代码如下
class person():
__name = "carl"
def kick(self):
print("your name is %s" % self.__name)
return "finish"
a = person()
print(a.kick())
your name is carl
finish
但其实python的私有只是伪私有,也可以直接通过别的方法进行调用
class person():
__name = "carl"
a = person()
print(a._person__name)
carl