Python中类方法、类实例方法、静态方法,私有属性和私有方法有何区别?
类方法
是类对象的方法,在定义时需要在上方使用 @classmethod 进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用。
使用格式:
对类的属性进行操作,就要用类的方法。
@classmethoddef 方法名(cls)
调用类方法
类名.方法名()
代码:
class Student:money = 10 # 类的属性 内存中只有一份,无论你创建多少个对象,把数据共享给对象# 修改类的属性,类的方法@classmethoddef change(cls):cls.money -= 2 # 修改类的属性 cls 类属性print(cls.money)one = Student()
# 类名.方法名() 推荐
Student.change()
two = Student()
# 对象.方法名()
two.change()
测试结果:
8
6
静态方法
是一个任意函数,在其上方使用 @staticmethod 进行装饰,可以用对象直接调用,静态方法实际上跟该类没有太大关系。没有传递一个对象self,也没有传递类对象cls
节省内存资源 不用传递参数。
使用格式:
@staticmethoddef 方法名()
代码:
class Welcome:@staticmethod # 静态方法,不用传递参数def show():print("*" * 10)print("欢迎使用该后台系统")# 静态方法的调用
# 类名.方法名()
Welcome.show()
类实例方法
是类实例化对象的方法,只有实例对象可以调用,形参为self,指代对象本身;
代码:
class Car:def __init__(self, name, loss): # loss [价格,油耗,公里数]self.name = nameself.loss = lossdef getName(self):return self.namedef getPrice(self):# 获取汽车价格return self.loss[0]def getLoss(self):# 获取汽车损耗值return self.loss[1] * self.loss[2]Bmw = Car("宝马", [60, 9, 500]) # 实例化一个宝马车对象
print(getattr(Bmw, "name")) # 使用getattr()传入对象名字,属性值。
print(dir(Bmw)) # 获Bmw所有的属性和方法
运行结果:
宝马
[‘class’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’,
‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’,
‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’,
‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’,
‘repr’, ‘setattr’, ‘sizeof’, ‘str’,
‘subclasshook’, ‘weakref’, ‘getLoss’, ‘getName’, ‘getPrice’,
‘loss’, ‘name’]
私有属性
如果在属性名前面加了2个下划线’__’,则表明该属性是私有属性,否则为公有属性
class Dog:def __init__(self):self.__age = 10
one = Dog()
print(one.__age)
私有方法
在方法名前面加了2个下划线’’,是
私有方法。
class Work:def __show(self):print("大家好我的工作台低了")one = Work()
one.__show()
私有的属性和私有的方法,在类里面使用
class Work:def __init__(self):self.__age = 10 # __属性 在类的外部不能访问def __show(self): # 私有的方法在类的外部不能访问print(self.__age) # 私有的属性,在类的外部不能访问,在类的内部可以访问def look(self):self.__show() # 在类里面可以one = Work()
# print(one.__age) #提示错误
# one.__show() #提示错误
one.look()
运行结果:
10
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
