python基础语法 010 类和对象- 4 类的实例属性__init__

 前提:

        像品牌这样的属性对于所有的奔驰车都是一样的,都是“奔驰”

但有些属性,比如颜色,发动机编号每一台奔驰车都是不同的,所以可以在定义的类里,将颜色、发动机编号不应该作为类的属性,而是作为每个实例独有的属性

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'
"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值