python对象与实例_Python入门——类、类对象、实例对象、与类和对象相关的内置函数,门类...

62e471c572e2160f00135897287d650b.png

以下内容来自于网课学习笔记。

使用的环境:

Window10+64位操作系统

PyCharm+Python3.7

一、类、类对象、实例对象

c5378cbf17b631b3681a600291164700.png

a、b、c并不影响类定义和类对象内容。但是类对象可以影响实例对象。

class C:

# 公有变量

count=0

# 四个实例对象

a=C()

b=C()

c=C()

d=C()

print(a.count)

print(b.count)

print(c.count)

print(d.count)

# 对count进行了赋值操作,覆盖了类中的count

c.count+=10

print(a.count)

print(b.count)

print(c.count)

print(d.count)

# 类对象

# 直接操作原类中的变量,实例变量的count会变化

C.count+=100

print(a.count)

print(b.count)

# 由于c实例对象已经操作过count,所以原count已经被覆盖了

print(c.count)

print(d.count)

0

0

0

0

0

0

10

0

100

100

10

100

不要试图在一个类里边定义出所有能想到的特性和方法,应该利用继承和组合机制来进行扩展。

用不同的词性命名,如属性名用名词,方法名用动词。

class C:

def x(self):

print("X-man")

c=C()

c.x()

# 创建一个x属性,属于实例对象c

c.x=1

print(c.x)

# 不能再次调用,因为属性名与方法名相同,方法被覆盖

c.x()

e130ea0fb357be1b8cce9c7d4e157bac.png

二、绑定

Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。

class HH:

def setXY(self,x,y):

self.x=x

self.y=y

def printXY(self):

print(self.x,self.y)

hh=HH()

print(hh.__dict__)

print(HH.__dict__)

hh.setXY(3,5)

hh.printXY()

print(hh.__dict__)

print(HH.__dict__)

del HH

# 存在在内存中

hh.printXY()

# 失败:HH已经不存在了

hhh=HH()

8e886f7ba395795d6d5ea56e7fc0fc58.png

三、与类和对象相关的内置函数

1. issubclass(class, classinfo)

如果class是classinfo的子类,返回True。

否则,返回Error

class A:

pass

class B(A):

pass

class C:

pass

print(issubclass(B,A))

print(issubclass(B,B))

print(issubclass(B,object))

print(issubclass(B,C))

55253314c3e92f64005c2f0684ed4ec6.png

2. isinstance(object,classinfo)

检查一个实例对象是否属于一个类。

第一个参数:待检查的实例对象

第二个参数:类,可以是一个元组,包含多个类。

若第一个参数不是对象,则永远返回False。

若第二个参数不是类或者由类对象组成的元组,会抛出一个TypeError异常。

class A:

pass

class B(A):

pass

class C:

pass

b1=B()

print(isinstance(b1,B))

print(isinstance(b1,A))

print(isinstance(b1,C))

print(isinstance(A,B))

f3b68182dcfb184128de7fbe6f64e86e.png

3. hasattr(object,name)

是否一个对象内包含指定属性。

第一个参数: 对象

第二个参数:属性名

class A:

def __init__(self,x=0,y=3):

self.x=x

self.z=y

a=A()

print(hasattr(a,"x"))

print(hasattr(a,"y"))

print(hasattr(a,"z"))

print(hasattr(A,"x"))

print(hasattr(A,"y"))

print(hasattr(A,"z"))

print(hasattr(a,x))

95deb833a67a877ed12c63fd9698ef07.png

4. getattr(object,name[,default])

返回对象指定的属性值。

第一个参数:对象名

第二个参数:属性名

可选参数default: 出错的提示信息。

若指定的属性不存在:

若设置了default,则打印default的值

若没有设置default值,则打印

AttributeError

class A:

def __init__(self,x=0,y=3):

self.x=x

self.z=y

a=A()

print(getattr(a,"x"))

print(getattr(a,"z"))

print(getattr(a,"y","属性y不存在!"))

print(getattr(a,"y"))

0aa6a550832ffbce6bad1110c59de65b.png

5. setattr(object,name,value)

设置对象中指定属性的值。若指定的属性不存在,则在对象中加入此属性。

第一个参数:对象名

第二个参数:属性名

第三个参数:属性值

class A:

def __init__(self,x=0,y=3):

self.x=x

self.z=y

a=A()

setattr(a,"x",10)

setattr(a,"z","hello")

print(getattr(a,"x"))

print(getattr(a,"z"))

print(getattr(a,"y","属性y不存在!"))

setattr(a,"y",[3,4,5])

print(getattr(a,"y","属性y不存在!"))

344c2c20ecfbe3e04cb947cb4cfb122d.png

6. delattr(object,name)

删除对象中指定的属性。

第一个参数:对象名

第二个参数:属性名

若属性不存在,则会返回

AttributeError

错误。

class A:

def __init__(self,x=0,y=3):

self.x=x

self.z=y

a=A()

print("x:"+str(getattr(a,"x")))

print("y:"+str(getattr(a,"z")))

setattr(a,"y",[3,4,5])

print("y:"+str(getattr(a,"y","属性y不存在!")))

delattr(a,"y")

print(getattr(a,"y","属性y不存在!"))

91f1688e274557ebbe2e4cc3b5f059ec.png

7. property(fget=None,fset=None,fdel=None,doc=None)

通过属性设置属性。

第一个参数:传入获取属性的方法

第二个属性:传入设置属性的方法

第三个参数:传入删除属性的方法

第四个参数:

class WW:

def __init__(self,size=10):

self.size=size

def getSize(self):

print("size:"+str(self.size))

def setSize(self,value):

self.size=value

def delSize(self):

del self.size

x=property(getSize,setSize,delSize)

ww=WW()

ww.getSize()

ww.x

ww.x="WaitFoF"

ww.x

print(ww.size)

ww.getSize()

del ww.x

ww.size

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值