网页制作与网站建设从入门到精通 下载,wordpress评论框不见了,昆明做网站建设的公司哪家好,哪个网站网页做的好看实例属性和类属性
类中#xff0c;没有self指定的是类属性#xff0c;有self指定的是实例属性。类中的方法是类属性。 类和实例都是名字空间。类是类属性的名字空间#xff0c;实例时实例属性的名字空间。 可以通过类访问类属性#xff0c;通过实例访问实例属性。如果实例…实例属性和类属性
类中没有self指定的是类属性有self指定的是实例属性。类中的方法是类属性。 类和实例都是名字空间。类是类属性的名字空间实例时实例属性的名字空间。 可以通过类访问类属性通过实例访问实例属性。如果实例没有同名属性的话也可以通过实例访问类属性。 比如类C有version属性可以通过类访问C.version。创建实例c后实际上访问c.version会失败但是会首先在实例中搜索version然后在类中搜索再到继承树中的基类。
访问类属性
class C(object):version 1.2 # 类属性
cC()
C.version # 通过类访问类属性
c.version # 通过实例访问类属性类属性为不可变对象通过实例访问类属性
C.version 1 # 通过类更改类属性
c.version 1 # 不能通过实例更改类属性这样会创建一个实例属性
c.version 1 # 为2.2,以类属性的值创建实例属性,等于c.version C.version 1类属性为可变对象通过实例访问类属性
class Foo(object):xfoo Foo()
foo.x # {2003:poe2}foo.x[2004] valid path
foo.x # {2003:poe2, 2004:valid path}Foo.x # {2003:poe2, 2004:valid path} 通过实例修改了类属性del foo.x # 失败类属性持久化
通过实例属性类修改类属性很危险。 类属性是静态成员类属性的修改会影响所有实例。
绑定和方法调用
方法是类内部定义的函数方法是类属性不是实例属性。绑定主要与方法调用有关。 方法只有在类拥有实例时才能被调用。存在一个实例时方法才认为是绑定到哪个实例没有实例时就是未绑定的。 方法有self参数用于引用方法所绑定的实例。 调用绑定方法 有一个MyClass类带self参数的foo方法实例mc。通过实例调用方法就是调用绑定方法mc.foo()。 调用非绑定方法 调用一个还没有任何实例的类中的方法也就是通过类调用类方法。需要明确的传递self参数。场景派生一个子类并且覆盖父类的方法需要调用父类中的方法。
class SubClass(FatherClass):def __init__(self, nm,ph):FatherClass.__init__(self,nm)self.ph ph静态方法和类方法
python静态方法特性之前通过在全局名字空间创建函数替代。 通常方法需要self参数绑定方法调用时自动传递。对于类方法需要的是类通常名为cls自动传递给类方法。
staticmethod()和classmethod()内建函数
经典类中使用静态方法和类方法
class TestStaticMethod:def foo():print calling static method foo()foo staticmethod(foo)class TestClassMethod:def foo(cls):print calling class method foo()foo classmethod(foo)tsm TestStaticMethod()
TestStaticMethod.foo() # 通过类调用
tsm.foo() # 通过实例调用
tcm TestClassMethod()
TestClassMethod.foo() # 通过类调用
tcm.foo() #通过实例调用使用函数修饰符
class TestStaticMethod:staticmethoddef foo():print calling static method foo()
class TestClassMethod:classmethoddef foo(cls):print calling class method foo()组合
大的类包含其他小类的实例类之间显著不同小类是大的类所需要的组件。
class P:P classdef __init__(self):print created an instance of , self.__class__.__name__
class C(P):passpP() # 父类实例
p.__class__
P.__bases__
p.__doc__c C()
c.__class__
C.__bases__
C.__doc__ #文档字符串不能继承父类