私有成员和公有成员
1、_xxx 保护成员,不能用from 某的了import * 导入,只能类对象和类的子对象可以访问
2、__xxx__ 系统定义的特殊成员
3、__xxx 类的私有成员,一般只有类对象自己可以访问,子类也不能访问,但是对象外部可以通过 对象名._类名__xxx来访问
class A(object):
'''
1、_xxx 保护成员,不能用from 某的了import * 导入,只能类对象和类的子对象可以访问
2、__xxx__ 系统定义的特殊成员
3、__xxx 类的私有成员,一般只有类对象自己可以访问,子类也不能访问
'''
#构造函数
def __init__(self,value1 =0,value2 = 0):
self._value1 = value1
self.__value2 = value2 #私有成员
#成员方法
def setVaule(self,value1,value2):
self._value1 = value1
self.__value2 = value2
a = A()
print(a._value1)
print(a._A__value2)
0
Traceback (most recent call last):
0
File "D:/PYTHON_TEST/python_xulie/面向对象编程/class_test.py", line 21, in <module>
print(a.__value2)
AttributeError: 'A' object has no attribute '__value2'
数据成员
数据成员可以分为属于对象的数据成员和属于类的对象成员,属于对象的数据成员主要是在 __init__方法中构造的,定义和使用时必须时使用self.成员名 , 属于类的数据成员是所有兑现公共有的
class Car(object):
'''
数据成员可以分为属于对象的数据成员和属于类的对象成员,属于对象的数据成员主要是在 __init__方法中构造的,定义和使用时必须时使用self.成员名 ,
属于类的数据成员是所有兑现公共有的
'''
price = 100000
def __init__(self,c):
self.color = c
car1 = Car('red')
print(car1.price,car1.color)
car2 = Car('blue')
print(car2.price,car2.color)
car1.name = 'QQ' #动态增加类的属性
car2.name = 'QR'
car2.color = 'gary' #动态修改对象的属性
car2.price = 200000 #动态修改类的数据变量
print(car1.price,car1.color,car1.name)
print(car2.price,car2.color,car2.name)
def setSpeed(self,s):
self.speed = s
import types
car1.setSpeed = types.MethodType(setSpeed,car1) #给实例动态的增加方法
car1.setSpeed(50)
print(car1.speed)
100000 red
100000 blue
100000 red QQ
200000 gary QR
50
方法
类中定义的方法,一般分为公有方法、私有方法、静态方法和类方法
class Root():
__total = 0
def __init__(self,v):
self.__value = v
Root.__total += 1
def Show(self): #普通实例方法
print('self.__value:',self.__value)
print('self.__total:',Root.__total)
@classmethod #装饰器,申明类方法
def classShowTotal(cls): #类方法
print(Root.__total)
@staticmethod #装饰器,申明静态方法
def staticShowTotal(): #静态方法
print(Root.__total)
r = Root(3)
print(r.classShowTotal()) #通过对象调用类方法
print(r.staticShowTotal()) #通过对象调用静态方法
print(r.Show())
rr = Root(5)
print(Root.classShowTotal()) #通过类调用类方法
print(Root.staticShowTotal() )
print(Root.Show()) #试图通过类调用实例方法会报错
1
None
1
None
Traceback (most recent call last):
self.__value: 3
self.__total: 1
None
2
File "D:/PYTHON_TEST/python_xulie/面向对象编程/fangfa.py", line 28, in <module>
None
2
None
print(Root.Show()) #试图通过类调用实例方法会报错
TypeError: Show() missing 1 required positional argument: 'self'
可以通过这种方法来访问类成员
print(Root.Show(r)) #可以通过这种方法来访问实例对象
self.__value: 3
self.__total: 2
None