内置函数type

使用type创建带有属性的类

type接受一个字典来为类定义属性,因此

>>>Foo=type('Foo',(),{'bar':True})

可以翻译为:

>>>class Foo(object):
...            bar=True

并且可以将FOO当成一个普通的类一样使用:

>>>print (Foo)
<class '__main__.Foo'>
>>>print(Foo.bar)
True
>>>f=Foo()
>>>print(f)
<__main__.Foo object at 0x8a9b84c>
>>>print(f.bar)
True

当然,你可以向这个类继承,所以,如下的代码:

>>>class FooChild(Foo):
...        pass

就可以写成:

>>>FooChild=type('FooChild',(Foo,),{})
>>>print(FooChild)
<class '__main__.FooChild'>
>>>print(FooChild.bar) #bar属性是由Foo继承而来

注意:
type的第二个参数,元组中是父类的名字,而不是字符串
添加的属性是类属性,并不是实例属性

使用type创建带有方法的类

类增加方法,只需要定义一个带有恰当签名的函数并将其作为属性赋值即可

添加实例方法

>>>def echo_bar(self):          #定义了一个普通函数
    ...      print(self.bar)
>>>FooChild=type('FooChild',(Foo,),{'echo_bar':echo_bar})
#FooChild类中的echo_bar属性,指向了上面定义的函数
>>>hasattr(Foo,'echo_bar') #判断Foo类中,是否有echo_bar这个属性
>>>False
>>>hassattr(FooChild,'echo_bar') #判断FooChild类中,是否有echo_bar这个属性
>>>True
>>>my_foo=FooChild()
>>>my_foo.echo_bar()
True

添加静态方法

>>>@staticmethod
...     def testStatic():
...            print("static method...")
>>>Foochild=type('Foochild',(Foo,),{"echo_bar":echo_bar,"testStatic"
...:testStativ})
>>>fooclid=Foochild()
>>>fooclid.test.Static
<function __main__.testStatic>
>>>fooclid.testStatic()
static  method...
>>>fooclid.echo_bar()
True

添加类方法

>>>@classmethod
 ....  def testClass(cls):
              print(cls.bar)
>>>Foochild=type('Foochild',(Foo,),{echo_bar":echo_bar,"testStatic"
...:testStativ,"testClass":testClass})
>>>fooclid=Foochild()
>>>fooclid.testClass()
True

可以看到,在python中,类也是对象,可以动态的创建类。使用关键字 class时python在幕后做的事情,就是通过元类来实现的

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,148评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,239评论 25 709
  • 辩手:思维活跃,逻辑严谨,能从各种角度论证任何观点的语言高手。持方是什么,他们就持某一观点。这是专业辩手给人的普遍...
    自闭症要不自闭阅读 4,453评论 6 0
  • 明明失败了,却不肯承认,不肯吸取教训,硬要说这一切都是顺其自然的事情,硬要说只是不懂事,还有这样的事情依然要没心没...
    SweetCC阅读 1,076评论 0 0

友情链接更多精彩内容