面向对象编程

私有成员和公有成员

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值