前提:
像品牌这样的属性对于所有的奔驰车都是一样的,都是“奔驰”
但有些属性,比如颜色,发动机编号每一台奔驰车都是不同的,所以可以在定义的类里,将颜色、发动机编号不应该作为类的属性,而是作为每个实例独有的属性
class BenzCar:
brand = '奔驰'
country = '德国'
@staticmethod
def pressHorn():
print("嘟嘟~~")
def __init__(self, color, engineSN):
self.color = color
self.engineSN = engineSN
1.4 初始化方法:__init__
每个实例独有的属性,称为类的实例属性,
实例属性通常在类的初始化方法__init__里面定义
问题1:实例对象有多个属性的时候,有没有更方便的方法来设置?
问题2:__init__在什么时候调用?
ANS:类的定义、属性(对象属性、类属性),方法(对象方法),self的含义,初始化方法(__init__)
__init__特点:
1、没有return
2、传入的参数必须要设置成实例属性,才能被对象访问到,
3、一般放在类的最上面
1)什么是初始化?也称为实例化
要通过定义的类得到一个具体的对象。
对象个体,初始化过程保证每个人不一样的,则给东西进行出厂设置,
在特定的方法中去控制:
使用__init__:控制对象先天的属性
class Man:
#定义类属性,所有都这样
gender = '男'
power = '强'
handsome = 'very'
def __init__(self):
pass
2)实例属性的定义有两种方式:
- 1 类外面:对象名.属性
- 2 类里面:self.属性
class Man:
#定义类属性,所有都这样
gender = '男'
power = '强'
handsome = 'very'
def __init__(self,face_shaoe):
"""对象的初始化过程,让对象之间长得不一样
__init__传形式参数表示类生成对象的过程
"""
#去定义初始化,在类里面定义实例属性使用: self.属性 = ...
self.face = face_shaoe
xiaoyi = Man()
xiaoyi.gender #后天的 对象名.属性
3)特点1:__init__ 定义的形式参数 和对象的实例化 a = Man()的实际参数,是一一对应的
class Man:
#定义类属性,所有都这样
gender = '男'
power = '强'
handsome = 'very'
def __init__(self, face_shaoe):
"""对象的初始化过程,让对象之间长得不一样
__init__传形式参数表示类生成对象的过程
"""
#去定义初始化,在类里面定义实例属性使用: self.属性 = ...
self.face = face_shaoe
#xiaoyi = Man()
"""TypeError: __init__() missing 1 required positional argument: 'face_shaoe'"""
xiaoyi = Man('小脸')
print(xiaoyi.face)
"""
如果__init__传多个参数,除非传默认参数,否则有几个形参,传几个实参
"""
xiaoyi.gender #后天的
"""若多传,没有一一对应
"""
class Man:
def __init__(self, face_shaoe, name ):
self.face = face_shaoe
self.name = name
pass
xiaoyi = Man('小脸')
print(xiaoyi.face)
#如果不传实参name,类里面有2个实际参数
"""
TypeError: __init__() missing 1 required positional argument: 'name'
"""
4) 特点2:设置默认参数
class Man:
def __init__(self, name, face_shaoe = '方脸'):
self.face = face_shaoe
self.name = name
pass
#虽然有默认值,但可以后天改变其属性
xiaoyi = Man('xiaoyi')
print(xiaoyi.face)
print(xiaoyi.name)
xiaoyi = Man('xiaoyi1', '笑脸')
print(xiaoyi.face)
print(xiaoyi.name)
xiaoyi.face = '鹅蛋脸'
print(xiaoyi.face)
"""结果
方脸
xiaoyi
笑脸
xiaoyi1
鹅蛋脸
"""
5)特点3:没有return
class Man:
def __init__(self, name, face_shaoe = '方脸'):
self.face = face_shaoe
self.name = name
pass
return 'hello'
xiaoyi = Man('小脸','xiaoyi')
"""
TypeError: __init__() should return None, not 'str'
"""
6) 特点4:传入的参数必须要设置成实例属性,才能被对象访问到
class Man:
def __init__(self, name, face_shaoe = '方脸'):
self.face = face_shaoe
xiaoyi = Man('xiaoyi1', '笑脸')
print(xiaoyi.face)
print(xiaoyi.name)
"""
AttributeError: 'Man' object has no attribute 'name'
"""