类与对象————python

定义一个类:class 类名(父类):
类由属性和方法构成。方法即函数:def 函数名(self)self是一个参数,相当于this指针,将当下实例化对象传递给方法
python的构造方法:_ _init_ _( self,需初始化的属性 )
1、_ _init_ _(self,name='Alice')
2、函数体内:self.name=name
3、name=‘Alice’

共有和私有:
python中默认属性和方法均为共有,外界可直接访问。若需要将其变为私有,在变量或函数名前加上_ _即可,
若要在类外访问:1、通过方法(成员函数)间接访问。2、通过_类名_ _变量名访问
其实现在python的私有制是伪私有

继承:
class 类名(父类):
支持多重继承和“多层继承”。多重继承时:class 类名(A类,B类):
除构造和析构方法以外的方法及所有的属性可以继承
故子类需要先调用父类的构造方法:现有class Shark(Fish):
1、

def _ _init_ _(self):
Fish._ _init_ _(self)
……

2、使用super函数:不需要给出任何基类的名字,它可以自动找出所有基类并自动传入self参数

super()._ _init_ _()

**组合:**即在类A内部建立类B的实例对象

类、类对象和实例对象:
不同于c++,一定要注意区分类对象和实例对象!通常所指的对象是实例对象。
类对象是将具有类似属性和方法的对象抽象总结为类对象,可以定义相似的一些属性和方法,不同的实例对象取应用类对象的属性和方法能减少代码的重复率。

>>> class C:
	count=0
	
>>> a=C()
>>> b=C()
>>> c=C()
>>> print(a.count,b.count,c.count)
0 0 0
>>> c.count += 10
>>> print(a.count,b.count,c.count)
0 0 10
>>> C.count += 100
>>> print(a.count,b.count,c.count)
100 100 10
>>> C.x=10
>>> a.x
10
>>> c.x
10

1、abc是实例对象,C.count操作的是类对象
2、在python中,对于一个实例对象可以在类外部对其任意添加属性,添加的属性仅仅属于该实例化对象。在以上代码中c.count语句对实例对象c的count属性进行了赋值,实际相当于创建了一个新的同名属性,并覆盖了类对象C的count属性,它不再受类对象C的控制。故C.count += 100语句并没有对实例对象c起作用!
3、如2所述,类对象同样也可以在类外任意添加属性或对已有属性赋值,改变后所有未发生赋值覆盖的实例对象都会同步进行相应的操作
4、类的属性是与类对象进行绑定的,并不会依赖任何它的实例对象
5、当属性与方法同名时,属性会覆盖方法!
6、方法只有实例对象才可以调用,该规则称为绑定
7、类的属性可以在类中定义,可以在方法中创建,也可以在类外创建。当该属性在方法中创建时,若实例对象未调用该方法,则不拥有该属性。当实例对象调用了该方法时才拥有该属性,且该属性仅属于这个实例对象,甚至不属于类对象。

相关BIF:
issubclass(A,B):测试A是否为B的子类,若是则返回Ture反之返回False。B可以是一个类也可以是有多个类对象组成的元组
isinstance(a,A):测试a是否为A的实例对象,是返回Ture,不是抛出异常,当第一个参数不是实例对象时永远返回False。A可以是有多个类对象组成的元组
hasattr(object,name):测试一个对象里是否有指定的属性,属性要用引号,是返回Ture反之返回False
getattr(object,name[,default]):返回对象指定的属性(加引号)值,若不存在返回default的值,未指定则抛出异常
setattr(object,name,value):设定对象中指定属性的值,若该属性不存在则创建属性并赋值
delattr(object,name,value):删除对象中指定属性的值,若该属性不存在则抛出异常
property():第一个参数是获得属性的方法名,第二个参数是设置属性的方法名,第三个是删除的方法名。它返回一个可以设置属性的属性,故在类中定义时要有一个属性来接收该函数的返回值:x=property(get,set,del)可以通过它来读、修改、删除属性。作用在于,当需要对get,set,del函数进行大幅修改,函数名发生变动时,使用property函数就可以只修改它的参数,用户仍只需要操作x就好了。

其它:
object:是所有类的基类
对象._ _dict_ _:可查看该对象的所有属性
del:删除类对象或实例对象。删除一个类的类对象实例对象依然存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值