python类属性实例属性类方法实例方法,静态方法
1、类属性:属于类本身而不是类的实例。可以 使用类名或者实例名 来访问。对于所有的实例来说, 类属性的值是相同的,且在类的所有实例中是共享的 。 class Professor: # 类属性 department = "Computer Science" # 实例属性 def __init__(self, name, age): self.name = name self.age = age # 实例方法 def introduce(self): print(f"Hello, my name is {self.name}, and I am {self.age} years old.") # 访问类属性 print(Professor.department) # "Computer Science" # 创建教授对象 prof = Professor("John Smith", 40) # 访问类属性 print(prof.department) # "Computer Science"
在上面的代码中,我们使用类名或者实例名来访问department类属性,两种方式都可以得到相同的结果,即"Computer Science"。
2、实例属性:属于类的实例,只能通过实例名来访问。对于每个实例来说, 实例属性的值是不同的,且在不同实例中是不共享的。 class Professor: # 类属性 department = "Computer Science" # 实例属性 def __init__(self, name, age): self.name = name self.age = age # 实例方法 def introduce(self): print(f"Hello, my name is {self.name}, and I am {self.age} years old.") # 创建教授对象 prof1 = Professor("John Smith", 40) prof2 = Professor("Mary Brown", 35) # 访问实例属性 print(prof1.name) # "John Smith" print(prof2.name) # "Mary Brown"
在上面的代码中,我们创建了两个不同的 教授对象prof1和prof2,分别将它们的name属性设置为John Smith和Mary Brown。通过实例名来访问实例属性 。
3、类方法:与类本身相关的方法, 使用@classmethod装饰器来定义 。类方法的第一个参数通常为 cls,表示类本身,可以使用类名或者实例名来调用, 类方法可以访问和修改类属性,但不能访问实例属性 。 class Professor: # 类属性 department = "Computer Science" # 实例属性 def __init__(self, name, age): self.name = name self.age = age # 实例方法 def introduce(self): print(f"Hello, my name is {self.name}, and I am {self.age} years old.") # 类方法 @classmethod def change_department(cls, new_dept): cls.department = new_dept # 访问类属性 print(Professor.department) # "Computer Science" prof1 = Professor("John Smith", 40) prof2 = Professor("Jane Doe", 35) # 调用类方法# 调用类方法来修改类属性 Professor.change_department("Mathematics") print(prof1.department) # Mathematics print(prof2.department) # Mathematics
在上面的代码中,我们使用类名 调用了change_department类方法 , 将department类属性的值从"Computer Science"修改为"Mathematics"。 可以发现,这个修改是在所有的 实例中都 生效的。
4、实例方法:与类的实例相关的方法,使用类中的方法来定义,第一个参数通常为 self ,表示调用该方法的实例。 只能使用实例名来调用 class Professor: # 类属性 department = "Computer Science" # 实例属性 def __init__(self, name, age): self.name = name self.age = age # 实例方法 def introduce(self): print(f"Hello, my name is {self.name}, and I am {self.age} years old.") # 类方法 @classmethod def change_department(cls, new_dept): cls.department = new_dept # 实例方法 def retire(self): print(f"{self.name} is retiring.") self.age = 65 # 创建教授对象 prof = Professor("John Smith", 40) # 调用实例方法 prof.retire() # "John Smith is retiring." print(prof.age) # 65
在上面的代码中,我们调用了 retire实例方法,将prof对象的age属性从40修改为65 。只能使用实例名来调用实例方法
5、静态方法(staticmethod),它与类和实例都没有直接的关联,它们只是存在于类的命名空间中。静态方法是使用@staticmethod装饰器来定义的,它没有默认的参数,也不需要使用cls或self参数。 静态方法主要用于 与类相关的工具函数 ,它们没有默认的参数, 也不需要使用cls或self参数。 在使用时,我们可以 使用类名或实例名来调用静态方法 ,而不需要创建实例对象。静态方法可以访问类属性,但不能访问实例属性,因为它们没有cls或self参数。
eg.1 以教授类例子中,我们可以定义一个静态方法来计算两个教授之间的年龄差距。 class Professor: # 类属性 university = "MIT" def __init__(self, name, age, title, department): # 实例属性 self.name = name self.age = age self.title = title self.department = department def greet(self): print(f"Hello, my name is {self.name}.") @staticmethod def distance(prof1, prof2): # 计算两个教授之间的距离 return abs(prof1.age - prof2.age) # 创建两个教授对象 prof1 = Professor("John Smith", 50, "Professor", "Computer Science") prof2 = Professor("Alice Johnson", 45, "Associate Professor", "Electrical Engineering") # 调用静态方法计算两个教授之间的距离 distance = Professor.distance(prof1, prof2) print(f"The distance between {prof1.name} and {prof2.name} is {distance} years.")
我们定义了一个distance静态方法,它接受两个教授对象作为参数,并计算它们之间的年龄差。该方法与教授类相关,但不依赖于类的实例,因此我们使用静态方法来实现。我们可以使用类名来调用该方法,例如Professor.distance(prof1, prof2)。由于该方法没有访问实例属性,因此不需要使用self参数。
eg.2以教授为例,如何使用类名或实例名来调用静态方法。
假设我们已经定义了一个教授类Professor,并且在该类中定义了一个静态方法calculate_salary,用于计算教授的工资 class Professor: # 类属性 university = "MIT" def __init__(self, name, age, title, department, salary): # 实例属性 self.name = name self.age = age self.title = title self.department = department self.salary = salary def greet(self): print(f"Hello, my name is {self.name}.") @staticmethod def calculate_salary(salary): # 计算教授的工资 tax_rate = 0.2 # 税率为20% tax = salary * tax_rate return salary - tax # 使用类名调用静态方法 #XXXXXXXXXXXXXXXXXXXXXXXXXXXX salary = Professor.calculate_salary(100000) print(f"The actual salary is {salary}.") # 使用实例名调用静态方法 #XXXXXXXXXXXXXXXXXXXXXXXXXXXX # 创建一个教授实例 professor = Professor("John Smith", 50, "Professor", "Computer Science", 120000) salary = professor.calculate_salary(120000) print(f"The actual salary is {salary}.")
A、使用Professor.calculate_salary(100000)来调用静态方法,计算工资为100000的教授的实际工资, B、创建了一个教授实例professor,然后使用professor.calculate_salary(120000)来调用静态方法,计算该教授的实际工资。由于静态方法不依赖于类的实例,因此我们可以使用实例名或类名来调用该方法,两者的效果是一样的。
总之,静态方法可以使用类名或实例名来调用,两者的效果是一样的。在某些情况下,使用实例名调用静态方法可能更加直观和易于理解。
6、静态方法主要与类相关的工具函数
6.1 工具函数:比如math库中的sqrt()方法,用于计算平方根。可以定义一个类方法,用于计算多个数的平方根。 import math class Calculator: @staticmethod def calculate_squares(*args): squares = [] for num in args: squares.append(math.sqrt(num)) return squares print(Calculator.calculate_squares(16, 25, 36)) # [4.0, 5.0, 6.0]
6.2 创建辅助实例或对象:比如创建配置对象,可以定义一个静态方法,用于根据给定的配置文件路径,返回一个配置对象。 class Config: def __init__(self, config_path): # Load and parse the configuration file pass # Instance method to get a configuration value def get_value(self, key): # Return the value of the given key pass @staticmethod def load_from_file(config_path): return Config(config_path) config = Config.load_from_file("config.ini") value = config.get_value("key")
6.3管理或访问类的状态:比如跟踪类实例的数量,可以定义一个静态属性来记录类实例的数量,再定义一个静态方法,用于返回实例数量。 class Person: instance_count = 0 def __init__(self, name): self.name = name Person.instance_count += 1 @staticmethod def get_instance_count(): return Person.instance_count person1 = Person("Alice") person2 = Person("Bob") print(Person.get_instance_count()) # 2
电子皮肤机器人行业的突破性技术近年来,随着机器人技术的不断发展,电子皮肤也逐渐成为了机器人行业的热门话题。电子皮肤是一种被用于机器人医疗器械等应用的薄膜式电子材料。它具有灵敏度高可柔性折叠可适应不同形状的特点。
惠州市人大代表杨华坚持制造业当家,为企业发展释放强烈信号点击查看专题报道当前,整个市场经济形势向好,我们通过不断拓宽产品边界,完善产品矩阵,重研发增强企业竞争力。惠州市人大代表惠州铂科磁材有限公司经营委员会副主席杨华表示,近年来,在政府
我国代表性婴幼儿膳食调查数据首次发布本报记者韩松妍周岩婴幼儿期营养是全生命周期健康的基础,膳食营养摄入不足或过多是营养不良的主要原因。近日,中国疾病预防控制中心营养与健康所首次报告了十三五科技部基础资源调查专项中国0
温福铁路宁德站和罗源站宁德站位于宁德市东侨经济技术开发区漳湾镇土尾村,站台规模2台6线(截止2008年3月),投用时间2009年6月30日。主要铁路温福铁路和衢宁铁路。宁德的宁德时代非常著名,宁德时代是
赣锋锂业基本面分析(报告节选)全面剖析竞争力报告目录一公司业务分析1概述赣锋锂业2000年成立2010年上市,因坐落于江西而将公司命名为赣锋,主营业务为锂电池上游的锂化合物金属锂。创始人为技术出身,以工业级金属锂起家,后不断
惠州市政协委员卢修学打造企业风险投资创新中心,充分激发中小企业创新活力点击查看专题报道中小微企业是制造业高质量发展的重要基础。今年的惠州市政府工作报告提出,要推动形成大型企业顶天立地中型企业承天启地小型企业铺天盖地的良好生态。为充分中小微企业创新活力
一周定增融资润丰股份福鞍股份兴源环境王子新材等拟募资超10亿记者尹靖霏编辑2023年兔年第一周,A股市场上,有9家上市公司发布定增预案,润丰股份(301035。SZ)欲募资25。5亿元,兴源环境(300266。SZ)欲募12亿元,王子新材(
2022年完成年度销量目标的经销商仅19。4大河报豫视频记者祁驿2月6日,中国汽车流通协会发布2022年全国汽车经销商生存状况调查报告。调查显示,完成年度销量目标的经销商占比为19。4,42。2经销商完成了年任务指标的80以
35岁程序员的最佳选择不是转行业插叙一个39岁程序员的面试谈及这个话题之前,先说说今天的一个面试,一个39岁的程序员。其他公司的员工来参与我们公司的一个项目,不是入职。今天帮助公司做了一个应聘者的技术面试。该应聘
没钱还要收购舒客品牌母公司,两连板倍加洁股价调整记者胡振明编辑两连板后,2月7日早盘,倍加洁(603059。SH)股价触及近12个月新高25。47元股之后,出现了大幅的波动调整,交易量仍明显放大。2月6日晚间,倍加洁披露股票交易
四川绵阳市委领导走访调研在绵台资企业四川绵阳市委领导走访调研在绵台资企业(图片来源绵阳市台办)中国台湾网2月7日讯近日,绵阳市委常委秘书长统战部部长姚永红一行赴绵阳高新区台企绵阳普思电子有限公司调研。市委统战部市台办