python中表示类的公有成员_Python面向对象 | 类的成员

一. 细分类的组成成员

之前咱们讲过类大致分两块区域,静态字段部分和方法部分。

每个区域详细划分又可以分为:

classA:

company= ‘阿里巴巴‘ #静态变量(静态字段)

__tel = ‘xxxxxxx‘ #私有静态变量(私有静态字段)

def __init__(self,name,age): #特殊方法(初始化方法)

self.name = name #对象属性(普通字段)

self.__age = age #私有对象属性(私有普通字段)

def func1(self): #普通方法

pass

def __func(self): #私有方法

print(666)

@classmethod#类方法

defclass_func(cls):"""定义类方法,至少有一个cls参数"""

print(‘类方法‘)

@staticmethod#静态方法

defstatic_func():"""定义静态方法 ,无默认参数"""

print(‘静态方法‘)

@property#属性

defprop(self):pass

二. 类的私有成员

对于每一个类的成员而言都有两种形式:

公有成员,在任何地方都能访问

私有成员,只有在类的内部才能方法

私有成员和公有成员的访问限制不同

1. 属性

静态属性

对象属性

静态字段(静态属性)

公有静态字段:类可以访问;类内部可以访问;派生类中可以访问

私有静态字段:仅类内部可以访问;

公有静态属性(字段)

classC:

name= "公有静态字段"

deffunc(self):printC.nameclassD(C):defshow(self):printC.name

C.name#类访问

obj=C()

obj.func()#类内部可以访问

obj_son=D()

obj_son.show()#派生类中可以访问

私有静态属性(字段)

classC:__name = "私有静态字段"

deffunc(self):print C.__name

classD(C):defshow(self):print C.__nameC.__name #不可在外部访问

obj=C()

obj.__name #不可在外部访问

obj.func() #类内部可以访问

obj_son=D()

obj_son.show()#不可在派生类中可以访问

公有对象属性

classC:def __init__(self):

self.foo= "公有字段"

deffunc(self):print self.foo  #类内部访问

classD(C):defshow(self):printself.foo # 派生类中访问

obj=C()

obj.foo#通过对象访问

obj.func() #类内部访问

obj_son=D();

obj_son.show()#派生类中访问

私有对象属性

classC:def __init__(self):

self.__foo = "私有字段"

deffunc(self):print self.foo  #类内部访问

classD(C):defshow(self):printself.foo # 派生类中访问

obj=C()

obj.__foo #通过对象访问 ==> 错误

obj.func() #类内部访问 ==> 正确

obj_son=D();

obj_son.show()#派生类中访问 ==> 错误

2. 方法

公有方法:对象可以访问;类内部可以访问;派生类中可以访问

私有方法:仅类内部可以访问;

(1)公有方法

classC:def __init__(self):pass

defadd(self):print(‘in C‘)classD(C):defshow(self):print(‘in D‘)deffunc(self):

self.show()

obj=D()

obj.show()#通过对象访问

obj.func() #类内部访问

obj.add() #派生类中访问

(2)私有方法

classC:def __init__(self):pass

def __add(self):print(‘in C‘)classD(C):def __show(self):print(‘in D‘)deffunc(self):

self.__show()

obj=D()

obj.__show() #通过不能对象访问

obj.func() #类内部可以访问

obj.__add() #派生类中不能访问

总结:对于这些私有成员来说,他们只能在类的内部使用,不能再类的外部以及派生类中使用.

非要访问私有成员的话,可以通过 对象._类__属性名,但是绝对不允许!!!为什么可以通过._类__私有成员名访问呢?因为类在创建时,如果遇到了私有成员(包括私有静态字段,私有普通字段,私有方法)它会将其保存在内存时自动在前面加上_类名.

三. 类的其他成员

这里的其他成员主要就是类方法:

方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

实例方法

定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);

调用:只能由实例对象调用。

类方法

定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

调用:实例对象和类对象都可以调用。

静态方法

定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

调用:实例对象和类对象都可以调用。

双下方法(后面会讲到)

定义:双下方法是特殊方法,他是解释器提供的 由爽下划线加方法名加爽下划线 __方法名__的具有特殊意义的方法,双下方法主要是python源码程序员使用的,

我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码。

调用:不同的双下方法有不同的触发方式,就好比盗墓时触发的机关一样,不知不觉就触发了双下方法,例如:__init__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值