python是一门面向对象语言。因此,在python中创建类和对象是很容易的一件事。
在这篇博文中,主要写一下面向对象中使用的一些注意点。
Q1:面向对象编程
- 确定对象的属性和方法
- 抽象具有共同特征的对象为一个类
- 设计类与类之间的关系
- 实例化对象
Q2、类的定义、属性和方法
class Car: #定义一个名为car的类
color = ' ' #定义属性color
def run (self): #定义方法run(),参数为self,表示类自身的参数在方法中传递
print("go go go!")
BMW = Car() #实例化一个BMW对象,类为Car
BMW.color = 'red' #给BMW中color属性设置为red
print(BMW.color)
Q3:公有属性和私有属性
- 公有属性:name
- 私有属性:_ _name
class Human:
name='ren' #公有属性 name、gender、age
gender = 'male'
age = '25'
__money = 8000 #私有属性__money
zhangsan = Human()
zhangsan.name = 'zhangsan'
print(zhangsan.name)
注意:print(zhangsan.name) 访问的是公有属性name
print(zhangsan.__money) 不可以访问私有属性__money,程序执行的时候报错。如下:
那么我们要访问类中的私有属性怎么办呢?
使用方法来访问。
Q4:公有方法和私有方法
- 公有方法: def _ _funName(self):
- 私有方法: def funName(self):
def say(self): #公有方法
print("my name is %s ,i have %d "%(self.name,self.__money))
def __lie(self): #私有方法
print("my name is %s ,i have %d "%(self.name,self.__money))
zhangsan.say() 访问公有方法,可以
zhangsan.__lie() 访问私有方法,出错!如下:
注意:公有属性和方法大家都可以访问。但是私有属性和私有方法只有类内部才能使用。
因此可写成如下形式:
def say(self): #公有方法
print("my name is %s ,i have %d "%(self.name,self.__money))
self.__lie()
def __lie(self): #私有方法
print("my name is %s ,i have %d "%(self.name,self.__money))
Q5:特殊方法
(1)_ _init_ _() 构造函数
class Human:
def __init__(self):
print("#"*50)
zhangsan =Human()
可以看出,当创建一个对象时,构造函数自动执行。因此,可以用作初始化属性赋值!
def __init__(self,name,age):
self.name = name
self.age = age
(2)析构函数
Q6:魔法方法,实则也是一些内置的方法(前后有一些下划线的方法)
class Human:
name='ren' #公有属性 name、gender、age
gender = 'male'
age = '25'
__money = 8000 #私有属性__money
def __init__(self,name,age):
self.name = name
self.age = age
print("#"*50)
def __str__(self):
msg="hi! I am a girl!"
return msg
zhangsan =Human('zhangsan',30)
print(zhangsan)
创建完Human后,直接输出类自动执行方法__str__()
Q7:_ _doc_ _ 是一个内置属性,打印文档字符串
class Human:
'''
this is Human class docstring!!!
'''
print(Human.__doc__) #打印内置属性
执行结果如下:
其他的内置属性还有:
- __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
- __name__: 类名
- __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
- __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)