介绍
实例属性称之为成员变量、对象属性
在设计手机图纸时,就要设置好一些属性,比如名称、屏幕尺寸、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=