目录
1.类和对象的构成
类由属性和方法构成,对象是类实例化后的结果。不同对象之间共享类中的方法,但不共享实例属性(实例属性是各自的,类属性是共享的)。
2.实例属性、实例方法、类属性、类方法和静态方法
实例属性和实例方法从属于实例对象,类属性和类方法从属于类。其中类属性被所有实例对象共享,类方法不可以调用实例属性和实例方法。与类和对象无关的方法称为静态方法,静态方法不可调用实例属性和实例方法。
2.1 内存分析
3.代码演示及分析
class Car(object): # 类对象
car_num = 0 # 类属性(在__init__外部定义)
def __init__(self, brand, price): # 构造函数(初始化实例属性)
self.brand = brand # 实例属性(在__init__内部定义)
self.price = price # 实例属性
Car.car_num += 1 # 类修改类属性
def level(self): # 实例方法
if self.price > 300000:
print(f"{self.brand}是高级轿车")
else:
print(f"{self.brand}是非高级轿车")
@classmethod
def car_count(cls): # 类方法,只访问类属性,不能访问实例属性和方法
print(f"我有{cls.car_num}辆车")
@staticmethod
def tips(): # 静态方法,既不访问成员变量,也不访问类变量
print("温馨提示:开车不喝酒")
if __name__ == "__main__":
print(" --------------实例对象访问实例属性、实例方法、类属性、类方法、静态方法--------------")
# 通过类创建实例对象
bmw = Car("宝马", 500000)
print("实例对象访问实例属性:{0}".format(bmw.brand)) # 实例对象访问实例属性
bmw.level() # 实例对象调用实例方法
print("实例对象访问类属性:{0}".format(bmw.car_num)) # 实例对象访问类属性
bmw.car_count() # 实例对象调用类方法
bmw.tips() # 对象调用静态方法
print("--------------类访问实例属性、实例方法、类属性、类方法、静态方法--------------")
# print(Car.brand) # 类不可以访问实例属性
# Car.level() # 类不可以访问实例方法 但可以通过Car.level(bmw)
print(Car.car_num) # 类可访问类属性(即使没有对象)
Car.car_count() # 类调用类方法(即使没有对象)
Car.tips() # 类调用静态方法(即使没有对象)
--------------实例对象访问实例属性、实例方法、类属性、类方法、静态方法--------------
实例对象访问实例属性:宝马
宝马是高级轿车
实例对象访问类属性:1
我有1辆车
温馨提示:开车不喝酒
--------------类访问实例属性、实例方法、类属性、类方法、静态方法--------------
1
我有1辆车
温馨提示:开车不喝酒
总结:对象可以调用类中的属性和方法,但类方法不可以调用实例属性和方法
个人总结,不对之处欢迎指出