面向对象编程python,python面向对象编程指南
菜鸟课程面向对象
[1]中的示例:A类(对象):
.def __init__(self,v):
.self.value=v
.定义显示(自身):
.打印(自我价值)
.
在[2]中:a=A(3)
In [3]: a.show()
三
Python的特别之处在于,您可以动态地向类和对象添加成员类Car:
Price=100000 #定义类属性
def __init__(self,c):
Self.color=c #定义实例属性。
1=car (red) #实例化对象
car2=汽车(蓝色)
Print(car1.color) #视图实例属性
Print(Car.price) #查看类属性的值
Car.price=110000 #修改类属性
Car.name=QQ #动态添加类别属性
1.汽车。color= yellow #修改实例属性
print(car2.color,Car.price,Car.name)
打印(car1.color,Car.price,Car.name)
导入类型
定义设置速度(自身,秒):
self.speed=s
1.汽车。set speed=types . method type(set speed,car1) #动态添加成员的方法
1.汽车。setspeed (50) #调用成员方法
打印(car1.speed)导入类型
类别人员(对象):
def __init__(self,name):
assert isinstance(name,str),“名称必须是字符串”
self.name=name
定义歌唱(自我):
print(self.name 会唱歌。)
定义行走(自己):
print(self.name 可以走路。)
定义吃(自己):
print(self.name 能吃。)张=人(“张”)
Zhang.sing() #用户没有这种行为。
attribute error:“Person”对象没有属性“sing”
张. sing=类型。方法类型(sing,张)
#动态添加新行为
张(音译)
张灿辛格。
张. walk()
attribute error:“Person”对象没有属性“walk”
张。方法类型(走,张)
张. walk()
张灿漫步。
Del zhang.walk #删除用户行为
张. walk()
attribute error:“Person”对象没有属性“walk”
函数和方法之间有一个区别:
及格
t=演示()
定义测试(自我,v):
self.value=v
测试=测试
T.test #常用函数
0x00000000034B7EA0处的功能测试
T.test(t,3) #必须传递一个值t.test=types。self参数的MethodType(test,t)。
T.test #绑定方法
__main__的绑定方法测试。0x000000000074F9E8处的演示对象
T.test(5) #不需要为self参数传递值。
方法类中定义的方法大致可以分为四类:公共方法、私有方法、静态方法和类方法。公共方法和私有方法都属于对象。私有方法的名称以两个下划线“_ _”开头。每个对象都有自己的公共和私有方法,在这些方法中可以访问属于类和对象的成员;
公共方法可以由对象名直接调用,而私有方法不能由对象名直接调用。它们只能在属于对象的方法中由自身调用,或者通过Python外部支持的特殊方式调用。
如果通过类名调用属于某个对象的公共方法,则需要为该方法的self参数显式传递一个对象名,该参数用于显式指定访问哪个对象的数据成员。Class:属于类本身,用于定义类本身包含的状态数据实例变量。属于该类的对象用于定义对象中包含的状态数据。方法:定义类的对象的行为或功能。类别根:
这是一个类 #类定义文档。
__total=0 #类变量在整个实例化对象中是通用的。类变量通常不用作实例变量。
Def __init__(self,v): #构造方法
Value=0 #局部变量
自我。__value=v #实例变量
根。__total=1 #通过类访问类变量
Def show(self): #普通实例方法
打印(自我。_ _值:“”,自身。_ _值)
打印(根。__total:“”,根。_ _总计)
@classmethod # decorator,声明类方法
Def classShowTotal(cls): # class方法
打印(cls。_ _总计)
@staticmethod #修饰符,声明静态方法
Def staticShowTotal(): #静态方法
打印(根。_ _总计)
r=根(3)
R.classShowTotal() #通过对象调用类方法
一个
R.staticShowTotal() #通过对象调用静态方法
一个
r.show()
自我。_ _值:3
根。_ _总计:1
rr=根(5)
Root.classShowTotal() #通过类名调用类方法
2
Root.staticShowTotal() #通过类名调用静态方法
2
Root.show() #尝试通过类名直接调用实例方法,失败。
TypeError:调用未绑定的方法show()时,必须将根实例作为第一个参数(结果什么也没有得到)
但是这个方法可以用来调用方法和访问实例成员。
自我。_ _值:3
根。_ _总计:2
当通过类名调用实例方法时,Root.show(rr) #显式地为self参数传递对象名。
自我。_ _值:5
根。__total: 2该对象是类的一个实例。就类变量而言,它们属于类命名空间中定义的变量,所以程序不能直接访问这些变量,程序必须使用类名/对象来调用类变量。通过对象访问类变量本质上仍然是通过类名。如果程序修改了一个对象的实例变量,修改不会影响类变量和其他对象的实例变量。创建对象的基本方法是构造方法。您可以通过调用类的构造方法来创建类的对象。Python不需要使用新方法。不是python关键字。当用一个类调用一个实例方法时,Python self不会自动为第一个参数绑定调用者。u=User()User . walk(u)=u=User()u . walk()Python只要求手动绑定第一个参数的参数值,不要求必须绑定用户对象。也可以使用user . walk(“ASD”)。Python对象的一个方法调用另一个方法时,不能省略self。方法的第一个参数(通常是cls)会自动绑定到类本身,但静态方法不会。静态方法和类方法都可以通过类名和对象名调用,但是不能直接访问属于对象的成员,只能访问属于类的成员。静态方法可以没有参数。一般情况下,cls用作类方法的第一个参数名,但也可以使用其他名称作为参数,并且在调用类方法时不必为此参数传递值。用Python编程时,一般不需要使用类方法或者静态方法。程序可以使用函数来代替类方法或静态方法。但是在特殊场景下(比如工程模式),类方法和静态方法也是不错的选择。类的专有方法。
私人和公共成员A类:
def __init__(self,value1=0,value2=0):
自我。_value1=值1
自我。_ _值2=值2
定义设定值(自身,值1,值2):
自我。_value1=值1
自我。_ _值2=值2
定义显示(自我):
打印(自我。_value1)
打印(自我。__value2)
a=A()
a._value1
0
A._A__value2 #从外部访问对象的私有数据成员
在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。使用下划线作为变量名和方法名的前缀和后缀来表示类的特殊成员:
_xxx:受保护成员,不能用从模块导入* 导入;
__xxx__:系统定义的特殊成员;
__xxx:私有成员,只能由类对象本身访问。子类对象不能直接访问这个成员,但是可以通过一种特殊的方式在对象外部访问它,比如“对象名”。_ class name __xxx "。
注意:Python中没有严格意义上的私有成员。在[8]:类果(对象):
.值=1
.def __init__(self):
.自我。__color=Red
.自我。_num=0.1
.self.price=1
.定义显示(自身):
.print(value:{},color:{},num:{},price:{} 。f
.ormat(自身值,自身。_ _颜色,自我。_num,self.pri
.ce))
.
在[9]中:f=水果()
In [10]: f.show()
价值:1,颜色:红色,数量:0.1,价格:1
在[11]中:f .值
Out[11]: 1
在[12]:f . _ _颜色
-
AttributeError Traceback(最近一次调用)
模块中的ipython-input-12-8047530fa8c8
- 1华氏度_ _颜色
AttributeError:“水果”对象没有属性“__color”
在[13]: f._num
输出[13]: 0.1
[14]中:f.price
出[14]: 1类水果:
def __init__(self):
自我。__color=Red
self.price=1
苹果=水果()
Apple.price #显示对象的公共数据成员的值。
一个
Apple.price=2 #修改对象的公共数据成员的值。
苹果价格
2
打印(apple.price,苹果。_ fruit _ _ color) #显示对象的私有数据成员的值。
2红色
苹果。_Fruit__color=Blue #修改对象的私有数据成员的值
打印(apple.price,苹果。_水果_ _颜色)
2蓝色
打印(苹果__color) #不能直接访问对象的私有数据成员,出错
属性错误:水果实例没有属性" _ _颜色"
运算符重载#!/usr/bin/python3
类别向量:
def __init__(self,a,b):
self.a=a
self.b=b
def __str__(self):
返回"向量(%d,% d)%(自身。a、self.b)
def __add__(自身,其他):
返回向量(self . a other . a self . b other . b)
v1=向量(2,10)
v2=向量(5,-2)
在[18]中打印(v1 v2):v1 v2
Out[18]: __main__ .0x1f935fa5cf8向量(7,8)处的向量
在程序中,可以使用一个下划线来表示不关心该变量的值对于_在范围(5):
print(3,end= )
3 3 3 3 3
a,_=divmod(60,18) #只关心整商,不关心余数,等价于a=60//18
a
3
属性将属性设置为可读、可修改、可删除。
类别测试:
def __init__(self,value):
自我. value=值
def __get(self):
回归自我。_ _值
def __set(self,v):
自我. value=v
def __del(self):
德尔赛尔夫。_ _值
value=property(__get,__set,__del)
定义显示(自我):
打印(自我。_ _值)
t=测试(3)
t.show()
3
t值
3
t值=5
t.show()
5
t值
5
德尔t。值#删除属性
t。值#对应的私有数据成员已删除
属性错误:“测试”对象没有属性" _测试_ _值"
t.show()
属性错误:“测试”对象没有属性" _测试_ _值"
t.value=1 #为对象动态增加属性和对应的私有数据成员
t.show()
一
t值
一
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。