[入门]Python中的绑定

本文详细介绍了Python中类与对象的基本概念,包括方法调用、属性管理等核心内容,并演示了如何利用Python内置函数进行属性操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python严格要求需要有实例才能调用方法,这种限制实际上就是Python的绑定机制

>>> class A:
    def printA():
        print("Life is short")

>>> A.printA()
Life is short

这么做会存在一个问题,就是根据类实例化后的对象无法使用类里面的函数

>>> a = A()
>>> a.printA()
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    a.printA()
TypeError: printA() takes 0 positional arguments but 1 was given

在深入了解一下

>>> class C:
    def setXY(self,x,y):
        self.x = x
        self.y = y
    def printXY(self):
        print(self.x,self.y)
​

>>> d = C()

使用dict查看对象拥有的属性

>>> d.__dict__
{}
>>> C.__dict__
mappingproxy({'__module__': '__main__', 'setXY': <function C.setXY at 0x0000000002E13AE8>, 'printXY': <function C.printXY at 0x0000000002E13B70>, '__dict__': <attribute '__dict__' of 'C' objects>, '__weakref__': <attribute '__weakref__' of 'C' objects>, '__doc__': None})

dict属性由一个字典组成,键表示属性名,值表示数据值。

>>> d.setXY(8,9)
>>> d.__dict__
{'x': 8, 'y': 9}

把类实例删除掉,实例对象d仍然能调用printXY

>>> del C
>>> d.printXY()
8 9

issubclass(class,classinfo)
如果第一个参数(class)是第二个参数(classinfo)的一个子类,返回True,否则返回False:

>>> class A:
    pass>>> class B(A):
    pass>>> issubclass(B,A)
True
>>> issubclass(B,B)
True
>>> issubclass(B,object)
True
>>> class C:
    pass>>> issubclass(B,C)
False

isinstance(object,classinfo)
如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回True,否则返回False:

>>> b1 = B()
>>> isinstance(b1,B)
True
>>> isinstance(b1,C)
False
>>> isinstance(b1,A)
True
>>> isinstance(b1,(A,B,C))#只要class是其中任何一个候选类的子类,就返回True. 
True

hasattrr(object,name)
attr是attribute的缩写,是属性的意思。

>>> class C:
    def __init__(self,x=0):
        self.x = x
​

>>> c = C()
>>> hasattr(c,'x') # 属性名要用引号括起来
True

getattr(object,name[,default])
返回对象指定的属性值,如果指定的属性不存在,则返回default(可选参数)的值;若没有设置default参数,则抛出ArttributeError异常。

>>> getattr(c,'x')
0
>>> getattr(c,'y')
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    getattr(c,'y')
AttributeError: 'C' object has no attribute 'y'
>>> getattr(c,'y','您所访问的属性不存在')
'您所访问的属性不存在'

setattr(object,name,value)
与getattr()对应,setattr()可以设置对象中指定属性的值,如果指定的属性不存在,则会新建属性并赋值。

>>> setattr(c,'y','Billep')
>>> getattr(c,'y')
'Billep'

delattr(object,name)
与setattr()相反,delattr()用于删除对象中指定的属性,如果属性不存在,则会抛出AttributeError异常。

>>> delattr(c,'y')
>>> delattr(c,'z')
Traceback (most recent call last):
  File "<pyshell#66>", line 1, in <module>
    delattr(c,'z')
AttributeError: z

property(fget = None,fset = None,fdel = None,doc = None)
作用是通过属性来设置属性。

class C:
    def __init__(self,size = 10):
        self.size = size
    def getSize(self):
        return self.size
    def setSize(self,value):
        self.size = value
    def delSize(self):
        del self.size
    x = property(getSize,setSize,delSize)
​
>>> c = C()
>>> c.x
10
>>> c.x = 12
>>> c.x
12
>>> c.size
12
>>> del c.x
>>> c.size
Traceback (most recent call last):
  File "<pyshell#103>", line 1, in <module>
    c.size
AttributeError: 'C' object has no attribute 'size'

property()返回一个可以设置属性的属性,有了Property()用户访问size属性只提供了x属性,无论内部怎么改动,只需要相应的修改property()的参数,用户只需要去操作x属性即可。

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值