day 25 方法和函数 反射
特殊成员的补充:
# __str__ class Foo(object): def __init__(self): pass def func(self): pass def __str__(self): return "F1" #返回的结果必须是字符串,别的都不行 obj = Foo() print(obj,type(obj))
#### __doc__ class Foo(object): """ asdfasdfasdfasdf """ def __init__(self): pass def func(self): pass obj = Foo() print(obj.__doc__) #打印注释里面的内容
## __dict__ class Foo(object): def __init__(self,name,age): self.name = name self.age = age def func(self): pass obj1 = Foo('刘博文',99) obj2 = Foo('史雷',89) print(obj1.__dict__) # {'name': '刘博文', 'age': 99} print(obj2.__dict__) # {'name': '史雷', 'age': 89}
### __iter__ # l1是list类的一个对象,可迭代对象 l1 = [11,22,33,44] class Foo(object): def __init__(self,name,age): self.name = name self.age = age def func(self): pass def __iter__(self): # return iter([11,22,33,44,55,66]) yield 11 yield 22 yield 33 # obj1是Foo类的一个对象,可迭代对象 """ 如果想要把不可迭代对象 -> 可迭代对象 1. 在类中定义__iter__方法 2. iter内部返回一个迭代器(生成器也是一种特殊迭代器) """ obj1 = Foo('刘博文',99) for item in obj1: print(item)
今日内容:
1. isinstance/issubclass/type
2. 方法和函数
3. 反射
1、issubclass issubclass(Bar,Base)检查第一个参数是否是第二个参数的 子子孙孙类
issubclass class Base(object): pass class Foo(Base): pass class Bar(Foo): pass print(issubclass(Bar,Base)) # 检查第一个参数是否是第二个参数的 子子孙孙类
2、type:获取当前对象是由那个类创建。
""" class Foo(object): pass obj = Foo() print(obj,type(obj)) # 获取当前对象是由那个类创建。 if type(obj) == Foo: print('obj是Foo类型') """ # #### 练习题 """ class Foo(object): pass class Bar(object): pass def func(*args): foo_counter =0 bar_counter =0 for item in args: if type(item) == Foo: foo_counter += 1 elif type(item) == Bar: bar_counter += 1 return foo_counter,bar_counter # result = func(Foo(),Bar(),Foo()) # print(result) v1,v2 = func(Foo(),Bar(),Foo()) print(v1,v2) """