注: 1. a 被称为类test的属性 2. func_1 被称为类test的方法 3. 所有的class都是object的派生类
注意:子类重写__init__
不会自动调用基类的__init__
:与java不同。
对于任何类C,C具有六个特殊属性:
C.__name__ 类的名字(字符串); C.__doc__ 类的文档字符串(不能继承);C.__bases__ 类C的所有父类构成的元组C.__dict__ 类C的属性(字典)C.__module__ 类C定义所在的模块C.__class__ 实例C所对应的类(用的较少,只在新式类中)对于实例属性c = C()具有两个特殊属性:
c.__class__ 实例c的类c.__dict__ c的属性从实例中访问类属性需谨慎: 给一个与类属性同名的实例属性赋值,我们会“隐藏”类属性。即实例对于属性进行的修改只位于实例中,类中的同名属性不会改变。但是类属性的修改会影响到所有实例。
class Foo(object): x = 1.5 foo = Foo() foo.x #值为1.5 foo.x = 1.7 #或者foo.x += 0.2 Foo.x #值仍为1.5静态方法:不需实例化,可以直接用类名调用的方法。 类方法:可以通过类或它的实例来调用的方法。不管你是用类来调用这个方法还是类实例调用这个方法,该方法的第一个参数总是定义该方法的类对象。
staticmethod() 创建静态方法,不需要self作为第一个参数 @staticmethodclassmethod() 创建类方法,很多人使用cls作为变量名。 @classmethod class TestStaticMethod: def foo(): print ‘hahaha' foo = staticmethod(foo) #如果没有这个内建函数,会报错,因为没有self参数 class TestClassMethod: def foo(cls): print ‘hehehe' foo = classmethod(foo) #同上 ##现在可以用函数修饰符代替上面的方式(推荐): class TestStaticMethod: @staticmethod def foo(): print ‘hahaha' class TestClassMethod: @classmethod def foo(cls): print ‘hehehe'python属性默认是公开的。使用访问控制符来限定成员函数的访问,将对象数据隐藏,实现封装。 1. 双下划线(__)
:由双下划线开始的属性在运行时不能直接访问。 2. 单下划线(_)
:简单的模块级私有化只需在属性(或函数)名前使用单下划线字符,阻止模块属性用import来加载。
特殊方法允许类通过重载标准操作符来模拟标准类型,这些方法都是以双下划线开始及结尾的。 1. 模拟标准类型 2. 重载操作符
__add__(self,obj)方法 重载 + __iadd__()方法 重载+=__sub__()方法 重载 - __mul__()方法 重载 *__div__()方法 重载/绑定:方法只有在其所属类拥有实例的时候才能被调用, 非绑定:在子类构造器__init__()
中调用覆盖的父类__init__()
方法中使用(__del__()
同) 1. 实例化这个class (test) t = test()
2. 使用 class.method()
的方式去调用 class 的内置方法。 注意:当定义一个class的内置方法method时,method的参数的第一个永远是self。
issubclass(sub,sup)
:判断一个类是否是另一个类的子类,返回布尔值 isinstance(obj1,obj2)
:判定一个对象是否是另一个给定类的实例,返回布尔值。*attr()
系列函数可以在各种对象下工作
super()
:帮助找出相应的父类,然后方便调用相关属性。super(MyClass,self).__init__()
新闻热点
疑难解答