self是什么
class相当于房子图纸,每个对象是参照图纸建立的实际的房子,self相当于每一栋房子的门牌号,在下面这段代码里,每个对象都是调用了自己那栋房子里的方法,就是因为self
tips:在方法里,self必须是第一个
class Build():def setname(self,name):self.name = namedef 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 = namedef 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 parameterself.num = numdef kick(self):print("your num is %s" % self.num)building3 = Build(3) # new objectbuilding3.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 carlfinish
但其实python的私有只是伪私有,也可以直接通过别的方法进行调用
class person():__name = "carl"a = person()print(a._person__name)
carl