ホームページ  >  記事  >  バックエンド開発  >  Python のリフレクションとクラスの特別なメンバー メソッドについて

Python のリフレクションとクラスの特別なメンバー メソッドについて

巴扎黑
巴扎黑オリジナル
2017-09-16 10:06:341059ブラウズ

この記事では、リフレクションとクラスに関する Python の特別なメンバー メソッドを共有します。これは非常に優れており、必要な友人は参照してください。

リフレクションとは、4 つのビルドがあることを意味します。関数内: getattr、hasattr、setattr、delattr メンバーの取得、メンバーの確認、メンバーの設定、メンバーの削除

class Dog(object):
  def __init__(self,name):
    self.name = name
  def eat(self):
    print("%s is eating..."%self.name)
def run():
  print("runing ....")
d = Dog("lucy")
choise=input("请输入要调用的方法:")
if hasattr(d,choise):#判断一个对象是否有对应的字符串方法
  func=getattr(d,choise)#根据字符串去获取对象里相应的方法或属性的内存地址对象
  func()
else:
  setattr(d,choise,run)#setattr(obj,y,fun)相当于obj.y=fun,fun可以是属性或者方法
  v=getattr(d,choise)
  print(v)

dir([obj]):

このメソッドを呼び出すと、属性の大部分を含むリストが返されます。 obj の名前 (一部の特別な属性は含まれません)。 obj のデフォルト値は、現在のモジュール オブジェクトです。

hasattr(obj, attr):

このメソッドは、obj に attr という名前の値を持つ属性があるかどうかを確認するために使用され、ブール値を返します。

getattr(obj, attr):

このメソッドを呼び出すと、obj の attr value という名前の属性の値が返されます。たとえば、attr が 'bar' の場合、obj.bar が返されます。

setattr(obj, attr, val):

このメソッドを呼び出すと、obj の attr という名前の属性に値 val が割り当てられます。たとえば、attr が 'bar' の場合、obj.bar = val と同等です。 __doc__ 詳細な説明情報を表示します

__module__ は現在操作しているオブジェクトが配置されているモジュールを表します

__class__ は現在操作しているオブジェクトが属するクラスを表します

__init__ クラス内にオブジェクトを作成することで構築メソッドが自動的に実行されます

__del__ 破壊メソッド、現在のオブジェクト メモリ内に解放され、自動的に実行されます。 __call__ オブジェクトの後に括弧を追加して実行をトリガーします。
__str__ このメソッドがクラス内で定義されている場合は、印刷時に実行されます。このようなオブジェクトの場合、このメソッドが出力されます。
__getitem__ の戻り値 クラス内に辞書の属性メンバーが定義されている場合、
__setitem__ を取得してクラス内の辞書のデータを設定および変更し、削除することができます。クラス内の辞書のデータ
__metalass__ クラスの所有者を示すために使用されます インスタンスの作成
__new__ が __init__ をトリガーしてインスタンスを作成します



from lib.ss import a
#示例类 dog
class doges(object):
  """类的描述信息"""
  def __init__(self,name,food):
    self.name=name
    self.food=food
    self.data={}#定义一个类的字典
  def __call__(self, *args, **kwargs):#对象后面加括号解执行
    print(*args)
  def __str__(self):#默认输出返回值
    return self.name
  def __getitem__(self):#可以获取类的的字典
    return self.data
  def __setitem__(self, key, value):#可以设置类的的字典
    self.data[key]=value
  def __delitem__(self, key):#可以删除类的字典的内容
    del self.data[key]
dog=doges('xxx','iii')
print(dog.__doc__)
b=a()
print(b.__module__)#操作的对象的那个模块
print(dog.__class__)#当前操作的对象的类是什么
dog('111')#
print(doges.__dict__)#查看类或对象的成员 类只打印类的成员不打印对象的成员
print(dog.__dict__)#查看类或对象的成员 对象只打印对象的成员不打印类的成员
print(dog)#打印 __str__的返回值
print(dog.__str__())#打印返回值
dog['1']=1000#触发.__setitem__()
dog['2']=1000#触发.__setitem__()
print(dog.__getitem__())
print(dog.__delitem__('1'))#删除类中字典
print(dog.__getitem__())
#设置类的特殊方法
def func(self):
  print('hello word%s'%self.name)
  print()
def __init__(self,name,age):
  self.name=name
  self.age=age
##type参数 1:类名 2.类的基类 3.类的成员,字典格式
CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
cat=CAT('喵喵',3)
cat.func()
print(cat.name,cat.age)

以上がPython のリフレクションとクラスの特別なメンバー メソッドについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。