python 【面向对象程序设计】

本文详细介绍了Python面向对象编程的概念,包括类的属性(实例属性和类属性)、静态方法、类方法、私有成员和公有成员的访问规则,以及@property装饰器的应用。通过实例解析了如何使用self参数,动态添加属性和方法,以及静态方法和类方法的调用方式。
摘要由CSDN通过智能技术生成

python 【面向对象程序设计】

✔类的所有实例方法都至少有一个self参数,且 self 必须是方法的第一个参数(如果有多个参数的话),self 代表将来要创建的对象本身。

■在Python,将实例方法的第一个参数定义为 self 只是一个习惯。实际上,不是一定要用 self 来表示将来创建的对象,可以自己取定。

1 class Dog:
2     def __init__(nself,name):
3         nself.name=name;
4     def info(self):
5         print(self.name)
6 
7 d=Dog("大黄")
8 d.info()

 




✔类的属性有两类:实例属性、类属性。实例属性(也称:静态属性)是在构造方法__init__中定义的,因为实例属性是在对象创建时才会分配空间,所以定义和类内使用都要以self或类名为前缀,类外使用以对象名为前缀。类属性(也称:对象属性)是定义在所有方法之外的,类内使用以self或类名为前缀,类外使用以对象名或类名为前缀。

■在Python中比较特殊的是,可以在类和对象都创建完成后,动态向类中增加新的属性和方法,俗称混入(mixin)机制。    这就是Python的动态性。                  如何增加呢?增加新的属性:对象名 . 新属性=value。增加新方法:import types    对象名 . 新方法名 = types . MethodType(新方法名,对象名)

car1 = Car("Red")     #实例化对象
car2 = Car("Blue")
print(car1.color, Car.price)    #查看实例属性和类属性的值
Car.price = 110000       #修改类属性
Car.name = 'QQ'       #动态增加类属性
car1.color = "Yellow"      #修改实例属性
print(car2.color, Car.price, Car.name)
print(car1.color, Car.price, Car.name)

 

 

 

静态方法

① 用@staticmethod修饰器修饰
②=“ 定义在类中的全局函数
③可以无参数,若有参数,不会将第一个参数看做调用对象。
④调用方式为:a.)类名.静态方法名 b.) 对象名.静态方法名

类方法
①用@classmethod装饰器修饰,第一个参数cls是当前类。
②调用方式为:a.)类名.静态方法名 b.) 对象名.静态方法名

 

 

✔定义时,有“__”前缀的成员是私有成员。在类内以“self.__”的形式调用,类外则无法直接访问,但可以通过[1]公有成员方法和[2]Python特殊方式间接访问。

E: [1] def info(self,value)                     [2] 对象名 . _类名__私有成员

               return self.__value                     a._A__value

而定义时,无下划线前缀的成员是公有成员。在类内以“self.__”的形式调用,类外以“对象名 . 成员名”的形式访问。

 

 

✔私有方法和公有方法的定义与相应成员的定义相似。

 

■在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。用下划线作为变量名和方法名前缀和后缀来表示类的特殊成员:
_xxx:受保护成员,不能用'from module import *'导入;
__xxx__:系统定义的特殊成员;       定制类???
__xxx:私有成员

 

 

✔@property,property意思是“属性”,功能是代替set、get方法。

E:

 1 class B:
 2     def __init__(self,atr):
 3         self.__atr=atr
 4 
 5     @property    #代替getAtr方法
 6     def atr(self):
 7         print("property输出装饰器被调用")
 8         return self.__atr
 9 
10     @atr.setter    #代替setAtr方法
11     def atr(self,newAtr):
12         self.__atr=newAtr
13 
14 if __name__=="__main__":
15     b=B("20")
16     
17     print(b.atr)
18     """ atr为私有属性,无法在类外直接访问,但第15行语句能执行
19 通过输出语句“property输出装饰器被调用”可知是property的作用效果
20 """
21     b.atr=30
22     print(b.atr)
23     print(b._B__atr)

 

posted @ 2019-03-16 12:48 versionk 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值