class Car(): def __init__(self,brand,color,cost_performance): self.brand = brand self.color = color self.cost_performance = cost_performance def print_property(self): print(f'汽车品牌:{self.brand} 颜色:{self.color } 性价比:{self.cost_performance}')#实例化对象Mercedes_Benz = Car('GLC260','black','不高')Mercedes_Benz.print_property()#实例化对象BYD = Car('汉','red','高')BYD.print_property()
结果打印:汽车品牌:GLC260 颜色:black 性价比:不高汽车品牌:汉 颜色:red 性价比:高大家可以看到通过传入不同的参数,实例化了不同的类对象,相同的方法打印的结果却不同类的定义通过下面一张图概括下类的一些基本概念:类的定义, 类属性,类方法,初始化方法,静态方法类属性定义变量在class xxxx的下方,不属于任何其他方法,这种为类属性,可直接使用class.xxx调用可通过实例化对象类调用通过类直接调用并修改类属性的值,不管使用类调用还是实例化对象调用都会被修改通过实例化对象调用并修改类属性的值,影响实例化对象本身,但不影响类调用和其他实例化对象#直接使用类调用print(f'汽车乘坐人数:{Car.persons}')#结果:汽车乘坐人数:5
使用实例化对象调用Mercedes_Benz = Car('GLC260','black','不高') #实例化对象print(f'汽车乘坐人数 :{Mercedes_Benz.persons}')#结果:汽车乘坐人数:5
通过类调用并修改属性值Car.persons = 7print(f'汽车乘坐人数:{Car.persons}')Mercedes_Benz = Car('GLC260','black','不高') #实例化对象print(f'汽车乘坐人数 :{Mercedes_Benz.persons}')#结果: 类调用和实例化对象调用的属性值都已修改汽车乘坐人数:7汽车乘坐人数:7
通过实例化对象调用并修改属性值Mercedes_Benz = Car('GLC260','black','不高') #实例化对象Mercedes_Benz.persons = 7print(f'汽车乘坐人数:{Car.persons}')print(f'汽车乘坐人数 :{Mercedes_Benz.persons}')#结果: 类调用的属性值并没有被修改汽车乘坐人数:5汽车乘坐人数:7
类方法可直接使用类调用和实例化对象调用,方法内部也不能使用self.调用属性和方法但可以调用类属性和其他类方法和静态方法Car.print_persons()#实例化对象Mercedes_Benz = Car('GLC260','black','不高')Mercedes_Benz.print_persons()
静态方法可直接使用类调用和实例化对象调用,方法中参数不带self,方法内部也不能使用self.调用属性和方法Car.print_power_source('汽油')#实例化对象Mercedes_Benz = Car('GLC260','black','不高')Mercedes_Benz.print_power_source('汽油')
普通方法没有使用@staticmethod和@classmethod装饰的函数,只能使用实例化对象调用比如上面例子中的print_property方法def print_property(self): print(f'汽车品牌:{self.brand} 颜色:{self.color } 性价比:{self.cost_performance}')
如果使用类调用该方法,会报错Car.print_property()#报错Traceback (most recent call last):File "/Users/usera/Desktop/test.py", line 35, in <module>Car.print_property()TypeError: Car.print_property() missing 1 required positional argument: 'self'
初始化方法__init__()初始化方法定义的属性,只能使用实例化对象调用如果使用类调用,同样会报错Car.brand#报错Traceback (most recent call last):File "/Users/usera/Desktop/test.py", line 35, in <module>Car.brandAttributeError: type object 'Car' has no attribute 'brand'
总结通过以上示例,可以看出类的实例化对象可访问普通方法、类方法和静态方法,类属性和实例化属性, 而使用类只能访问类方法和静态方法,类属性共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干水非石之钻,索非木之锯,渐靡使之然也”-----指水滴不断地滴,可以滴穿石头;-----比喻坚持不懈,集细微的力量也能成就难能的功劳----感谢读者的阅读和学习,谢谢大家(图片来源网络,侵删)
0 评论