面向对象是 Python 的特色,也是 Python 学习中的重点; 在OOP(面向对象)编程中,有两个重要的概念: 类( class ) 和 实例( instance ):
#!/usr/bin/python3
#-*- coding: utf-8 -*-
class Philosopher:
def __init__(self, name, gender, sayings):
self.name = name
self.gender = gender
self.sayings = sayings
def gengyishi(self):
print(self.name + self.gender + ":" + self.sayings + self.gender)
print(self.__class__)
van = Philosopher( "VAN" , "♂ " , "乖♂乖♂站♂好" )
van.gengyishi()
如上图所示, Philosopher 就是我们定义的一个类,van 就是这个类的一个实例, __ __init____() 就是这个类的构造方法,即实例化这个类时会执行的函数;
在上述例子中,self 必须是 __ init__() 的第一个参数,但它可以改成其他的名字,就比如叫 bili :#!/usr/bin/python3
#-*- coding: utf-8 -*-
class Philosopher:
def __init__(bili, name, gender, sayings):
bili.name = name
bili.gender = gender
bili.sayings = sayings
def gengyishi(bili):
print(bili.name + bili.gender + ":" + bili.sayings + bili.gender)
print(bili.__class__)
van = Philosopher( "VAN" , "♂ " , "乖♂乖♂站♂好" )
van.gengyishi()
结果:
VAN♂ :乖♂乖♂站♂好♂
<class '__main__.Philosopher'>
可见,改动后,执行的结果没有任何区别;
但还是建议大家遵守代码规范,使用 self 以增强代码的可读性;_____________________________________________________________________
倘若我们想将 VAN 的 gender 变成一个私有变量,那可以在 它前面加上 __
如:把 self.gender 变成 self.__gender ,这样它就对类的外部不可见了,如果强行调用,会出现:AttributeError: 'Philosopher' object has no attribute '__gender'
_____________________________________________________________________
self代表的是类的实例(instance), 而不是这个类#!/usr/bin/python3
#-*- coding: utf-8 -*-
class Philosopher:
def __init__(self, name, gender, sayings):
self.name = name
self.gender = gender
self.sayings = sayings
print(self)
print(self.__class__)
def gengyishi(self):
print(self.name + self.gender + ":" + self.sayings + self.gender)
van = Philosopher( "VAN" , "♂ " , "乖♂乖♂站♂好" )
van.gengyishi()
bili = Philosopher( "Billy" , "♂ " , "folkq" )
bili.gengyishi()
输出结果(注意,van和bili 的self地址不同):
<__main__.Philosopher object at 0x7f9da597e6a0>
<class '__main__.Philosopher'>
VAN♂ :乖♂乖♂站♂好♂
<__main__.Philosopher object at 0x7f9da597e6d8>
<class '__main__.Philosopher'>
Billy♂ :folkq♂
_____________________________________________________________________
以上所有代码都在"Python 3.7.3"中成功解释执行;
_____________________________________________________________________