簡體   English   中英

在 Python 中為類動態添加方法

[英]Dynamically adding methods to a class in Python

我正在嘗試根據列表向類添加方法。

class _Roles(object):
    """
    set the roles for dev, staging and production
    """
    def __init__(self):
        from types import MethodType
        steps = ['dev','stage','prod']
        for step in steps:
            def env_setter(self):
                print step
            method = MethodType(env_setter,self,self.__class__)
            setattr(self,step,method)

問題是,當我調用_Roles.dev()_Roles.stage()_Roles.prod() ,我總是會打印prod的最后一步,而不是為dev()獲取dev等等。 這是什么原因?

因為您對所有函數聲明使用相同的作用域 在單獨的作用域中定義每個函數。

只需使用setattr

class Foo:
    def __init__(self, v):
        self.v = v
        
def my_new_method(self):
    print("self.v =", self.v)

setattr(Foo, 'print_v', my_new_method)

Foo(5).print_v()

輸出 :

自我.v = 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM