python面向对象-实例属性

介绍

实例属性称之为成员变量、对象属性

在设计手机图纸时,就要设置好一些属性,比如名称、屏幕尺寸、cpu型号、ram容量、rom容量等,根据图纸生成制造手机。
类似的,类相当于图纸,在类中设计好属性,创建对象后,对象就可以使用这些属性。

定义属性

同理,设计类时,把必有的属性定义好,通过__init__()方法定义属性

#coding=utf=8
class Phone:
    def __init__(self):
        print("调用__init__()")
        #定义name属性
        self.name='智能手机'

huawei=Phone()

打印结果:

调用__init__()

访问属性

#通过实例访问属性
print(huawei.name)

打印结果:

智能手机

实例属性

像这种通过实例访问的属性,称之为实例属性

实例变量

实例属性也成为实例变量

问题与优化

不同款的手机名称都不相同,所以不能把手机名称写死在__init__()方法中,而是在创建实例时,传入手机名称

#coding=utf=8
class Phone:
    def __init__(self,name):
        print("调用__init__()",",name=",name)
        '''
        注意:self.name是实例的属性,name是形参
        '''
        self.name=name
'''
通过类Phone创建huawei对象(相当于根据手机图纸制造huawei)
__init__(self)方法中的self指代对象huawei
'''
huawei=Phone("华为P20")
print("huawei.name=",huawei.name)
'''
通过类Phone创建iphone对象(相当于根据手机图纸制造iphone)
__init__(self)方法中的self指代对象iphone
'''
iphone=Phone("iphoneX")
print("iphone.name=",iphone.name)

结果如下:

调用__init__() ,name= 华为P20
调用__init__() ,name= iphoneX

如果第一次学习面向对象,理解到这里会有些懵逼,很正常,多写代码,多理解,实在不行当唐诗背下来,会有一天突然顿悟

__init__()定义形参后必须传值:

给__init__(self,name)方法,增加name形参后,创建对象时必须传值,否则报错,如下:

#创建对象时不传参数
huawei=Phone()

报错如下:

TypeError: __init__() missing 1 required positional argument: 'name'

正确运行:

huawei=Phone("华为P20")

不想传值,就要指定默认值

修改如下:

#coding=utf=8
class Phone:
    def __init__(self,name=''):
        print("调用__init__()",",name=",name)
        '''
        注意:self.name是实例的属性,name是形参
        '''
        self.name=name


#创建对象时不传参数
huawei=Phone()

实例属性的name为空字符串,结果如下:

调用__init__() ,name=
huawei.name=

原文出处:/show_1EF2CNg8E7Sq.html