python类class语句和实例属性

1 python类class语句和实例属性

点号运算进行属性继承搜索,小括号运算产生实例对象,或调用类方法。

1.1 python类class语句

用法

class 类名(超类1,...,超类n):
    #等号赋值语句
    var = 'value'
    #def 赋值语句
    def classmethod(self[,var1,...,varn]):
        self.name = var1
        pass

描述

(1)模块导入或执行时,执行class语句生成类对象,并且赋值给class的头部类变量名。

(2)类内顶层赋值语句的变量成为类对象属性,称为类成员变量。

(3)通过“类名.属性名”访问类的成员属性。

(4)类方法第1个参数,通常为self。

文件

E**😗*\documents\F盘\testclass.py

class MyClass:
    s = '梯阅线条'
    def setData(self,value):
        self.data = value
        
    def display(self):
        print(self.data)
        
if __name__ == '__main__':
    print('MyClass={}'.format(MyClass))
    print('MyClass.s={}'.format(MyClass.s))
    print('MyClass.setData={}'.format(MyClass.setData))
    print('MyClass.display={}'.format(MyClass.display))

示例

# 打开cmd,执行下面示例
E:\documents\F盘>python testclass.py
MyClass=<class '__main__.MyClass'>
MyClass.s=梯阅线条
MyClass.setData=<function MyClass.setData at 0x01B3C780>
MyClass.display=<function MyClass.display at 0x01B3C810>

1.2 python实例对象和属性

描述

(1)小括号运算:小括号()调用类对象即:类名(),产生实例对象。

(2)点运算:实例对象继承类对象,通过“实例名.类属性”访问类对象属性。

(3)self:实例调用类方法,第一个参数self自动接收实例对象,为当前调用的主体。

(4)self:类调用方法,需显式给self传递参数值。

(5)self:类可以产生多个实例,类方法通过self区别当前调用的实例。

(6)属性设置:类外通过实例名设置属性,类内通过self设置属性。

(7)类数据属性:不可变对象,各自维护互不影响;可变对象,全部实例共用,一改全改。

(8)实例数据属性:相互独立,其他实例不可访问。

文件

E**😗*\documents\F盘\testclass.py

class MyClass:
    s = '梯阅线条'
    y = [1,2,3]
    def setData(self,value):
        self.data = value
        
    def display(self):
        #类通过self指向当前调用的实例
        print('display.self.data={}={}'.format(self.data,self))
        
if __name__ == '__main__':
    #类产生多个不同实例
    c1=MyClass() 
    c2=MyClass()
    print('c1={}'.format(c1))
    print('c2={}'.format(c2))
    
    c1.setData('c1')
    c2.setData('c2')#类内通过self设置属性
    c1.display()
    c2.display()
    c2.data='1'#类外通过实例名设置属性
    #通过实例名调用类方法,自动将当前实例传给self
    c2.display()
    #通过类名调用类方法,需要显式给self传参数
    MyClass.display(c2)
    
    #类数据为不可变对象,初始相同
    print('c1.s={}'.format(c1.s))
    print('c2.s={}'.format(c2.s))
    print('MyClass.s={}'.format(MyClass.s))
    
    #类数据为不可变对象,修改后互不影响
    c1.s = 'c1s'
    c2.s = 'c2s'
    MyClass.s = 'MyClass'
    print('c1.s={}'.format(c1.s))
    print('c2.s={}'.format(c2.s))
    print('MyClass.s={}'.format(MyClass.s))
    
    #类数据为可变对象,初始相同
    print('c1.y={}'.format(c1.y))
    print('c2.y={}'.format(c2.y))
    print('MyClass.y={}'.format(MyClass.y))
    
    #类数据为可变对象,修改后相互影响,指向同一个值
    c1.y[0] = 'c1y'
    c2.y[0] = 'c2y'
    MyClass.y[0] = 'MyClassy'
    print('c1.y={}'.format(c1.y))
    print('c2.y={}'.format(c2.y))
    print('MyClass.y={}'.format(MyClass.y))
    
    #类对象新增属性,类和实例都可以访问,因为继承搜索
    MyClass.MC='b'
    print('c1.MC={}'.format(c1.MC))
    print('c2.MC={}'.format(c2.MC))
    print('MyClass.MC={}'.format(MyClass.MC))

    #实例新增属性只属于当前实例,其他实例和类对象无法访问
    c1.x='a'
    print('c1.x={}'.format(c1.x))
    try:
        print('c2.x={}'.format(c2.x))
    except Exception as e:
        print('c2.x={}'.format(e))
    try:
        print('MyClass.x={}'.format(MyClass.x))
    except Exception as e:
        print('MyClass.x={}'.format(e))

示例

# 打开cmd,执行下面示例
E:\documents\F盘>python testclass.py
c1=<__main__.MyClass object at 0x0208ADD0>
c2=<__main__.MyClass object at 0x0208AD50>
display.self.data=c1=<__main__.MyClass object at 0x0208ADD0>
display.self.data=c2=<__main__.MyClass object at 0x0208AD50>
display.self.data=1=<__main__.MyClass object at 0x0208AD50>
display.self.data=1=<__main__.MyClass object at 0x0208AD50>
c1.s=梯阅线条
c2.s=梯阅线条
MyClass.s=梯阅线条
c1.s=c1s
c2.s=c2s
MyClass.s=MyClass
c1.y=[1, 2, 3]
c2.y=[1, 2, 3]
MyClass.y=[1, 2, 3]
c1.y=['MyClassy', 2, 3]
c2.y=['MyClassy', 2, 3]
MyClass.y=['MyClassy', 2, 3]
c1.MC=b
c2.MC=b
MyClass.MC=b
c1.x=a
c2.x='MyClass' object has no attribute 'x'
MyClass.x=type object 'MyClass' has no attribute 'x'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值