Re: py oop

楼主: sustainer123 (caster)   2024-09-18 12:47:21
※ 引述《sustainer123 (温水佳树的兄长大人)》之铭言:
: Instance Methods
: 实例方法 就class最常见那个
: def foo(self)
: 要有物件实例才能运行
: 也就是说:
: class.foo() #type error
: obj = clsss()
: obj.foo() #ok
: 实例方法就是把实例本身传给参数
: obj.foo() == foo(obj)
: 透过self 实例方法可以修改同一对象的属性
: Class Methods跟Static Methods明天再写
: 反正我文章也还没看完
没写好 修改一下
实例方法可以修改类变量也能修改实例变量
ex:
class Test(object):
class_attribute = 0
def __init__(self, value):
self.instance_attribute = value
def instance_method(self):
self.instance_attribute += 1
Test.class_attribute += 1
if __name__ == '__main__':
print(Test.class_attribute) # 0
t1 = Test(10)
t1.instance_method()
print(t1.class_attribute) # 1
print(t1.instance_attribute) # 11
t2 = Test(0)
t2.instance_method()
print(t1.class_attribute,t2.class_attribute) #2 2
大抵如此 不同实例共用类变量 然后能直接改类变类
但不同实例不共用实例变量
classmethods
类方法
py透过装饰器实现
@classmethods
类方法就把类丢进参数
以上面的code当例子
假设类方法为class_methods()
你可以t1.class_methods()
也可以Test.class_methods()
实际上传入的参数长这样:
class_methods(<class '__main__.Test'>)
类方法就是把类本身丢进参数
他可以直接修改类变量 但不能直接修改实例变量
假如你希望类方法修改实例变量 你必须传递实例做为类方法的参数
大概这样ㄅ staticmethod起床再说

Links booklink

Contact Us: admin [ a t ] ucptt.com