Python 入门 之 类成员

1、类的私有成员:

私有: 只能自己拥有

以 __ 开头就是私有内容

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

- 公有成员,在任何地方都能访问
- 私有成员,只有在类的内部才能使用 私有成员和公有成员的访问限制不同:
静态字段(静态属性)
- 公有静态字段:类可以访问;类内部可以访问;派生类中可以访问
- 私有静态字段:仅类内部可以访问;
class Human:

    live = "有思想"        # 类公有的属性
__desires = "有欲望" # (程序级别)类私有的属性
_desires = "有欲望" # (程序员之间约定俗成)类私有的属性 def __init__(self,name,age,sex,hobby):
self.name = name
self.age = age
self.sex = sex # 对象的公有属性
self.__hobby = hobby # 对象的私有属性 def func(self):
# 类内部可以查看对象的私有属性
print(self.__hobby) def foo(self): # 公有方法
# 类内部可以查看类的私有属性
print(self.__desires) def __abc(self): # 私有方法
print("is abc") class B(Human):
pass def run(self):
print(self.__desires)
self._Human__abc() # 强制继承(非常不推荐使用) b = B("天魔",28,"男","女孩子")
print(b.__desires)
b.run()
b._Human__abc() # _类名私有的属性和方法
# 子类不能继承父类中私有的方法和属性 # 类的外部查看
print(Human.live)
print(Human._desires) # 保证数据的安全性
Human.live = "无脑"
print(Human.live)

​ 为什么可以通过.类__私有成员名访问呢?因为类在创建时,如果遇到了私有成员(包括私有静态字段,私有普通字段,私有方法)它会将其保存在内存时自动在前面加上类名.

2、类的其他成员

(1)类方法:

class A:

    def func(self):         #实例方法
print("is A func") a = A() # 实例化 一个对象(实例)
A.func() # 添加参数
a.func()
class A:

    def func(self):             #实例方法
print("is A func") import time
class Times: t = time.time() # 类属性 @classmethod
def func(cls):
print(cls) # 类的地址
print("is A func")
object = cls() # 使用类方法可以获取到类地址进行实例化
cls.t = 1010101 a = A()
a.func() Times.func()
print(Times.t)
class Human:
count = 0 def __init__(self, name, age):
self.name = name
self.age = age @classmethod
def add_count(cls):
cls.count += 1 # 可以通过类名修改类属性 @classmethod
def get(cls):
return cls.count Human("天魔",56)
Human("天魔",56)
Human("天魔",56)
Human("天魔",56)
Human("天魔",56)
Human("天魔",56)
Human("天魔",56)
print(Human.get()) # 输出实例化的次数

<1> 类方法的作用:

类方法可以自动变换类名(最大的作用)
1> 使用类方法可以获取到类地址进行实例化
2> 可以通过类名修改类属性

类方法偶然会使用,使用最多的还是实例化方法

(2)静态方法(使用更少)

class A:

    def func(self):        # 实例方法
print("is A func") @classmethod
def cls_func(cls): # 类方法
print("is A cls_func") @staticmethod
def static_func(): # 静态方法
print("他就是普通的函数了") def static_func():
print("他就是普通的函数了") A.static_func()
a = A()
a.static_func()

<1> 静态方法不依赖于对象和类(静态方法就是一个普通的函数)

2、属性 :组合(伪装)

class A:

    live = "有思想"

    def func(self):
print("is A func") A.live
A.func()
class A:

    @property
def func(self):
print("is A func") a = A()
a.func
class Bmi:

    live = "有思想"

    def __init__(self, height, weight):
self.height = height
self.weight = weight @property
def bmi(self):
return self.weight / self.height ** 2 @bmi.setter # 设置属性时执行
def bmi(self,value):
print(value)
print("设置属性时执行我") @bmi.getter # 查看属性时执行
def bmi(self):
print("查看属性时执行我") @bmi.deleter # 删除属性时执行
def bmi(self):
print("删除属性时执行我") rimo = Bmi(1.8,100)
print(rimo.live) # 真属性 rimo.live = "无脑"
del Bmi.live
print(rimo.live)
print(rimo.bmi)
print(Bmi.__dict__) rimo.bmi = 20 # 伪装成属性进行设置
print(rimo.bmi) # 伪装成属性
del rimo.bmi
class Foo:

    def get_AAA(self):
print('get的时候运行我啊') def set_AAA(self,value):
print('set的时候运行我啊') def delete_AAA(self):
print('delete的时候运行我啊') AAA = property(get_AAA,set_AAA,delete_AAA) #内置property三个参数与get,set,delete一一对应 f1=Foo()
f1.AAA
f1.AAA = 'aaa'
del f1.AAA

3、元类

(1)type 查看数据类型(能够查看出当前内容从属于那个类)

print(type("alex"))
print(type([1,2,3,4]))
print(type((1,2,3,40)))
class A:
pass a = A() print(type(a))
print(type(A))
print(type(str))
print(type(list))
print(type(tuple))
print(type(object))
python自带的str、list、tuple也是某一个类的对象(python中一切皆对象)

(2)isinstance 判断参数1是不是参数2的对象

print(isinstance([1,2,3],list))
print(isinstance(str,type))
print(isinstance(list,type))
print(isinstance(object,type))

(3)issubclass 判断参数1是不是参数2的子类

class A:
pass class B(A):
pass print(issubclass(B,A))

4、元类 -- 构建类

(1)object 与 type的关系

<1> object是type的对象
<2> 新式类都默认继承object
print(issubclass(type,object))  # type是object的子类
print(isinstance(object,type)) # object是type的对象

Python 入门 之 类成员的更多相关文章

  1. Python 入门 之 类的约束以及super()剖析

    Python 入门 之 类的约束以及super()剖析 1.类的约束 第一版: class WechatPay: def pay(self): print("微信支付") clas ...

  2. Python 入门 之 类的三大关系(依赖 / 组合/ 继承关系)

    Python 入门 之 类的三大关系(依赖 / 组合/ 继承关系) 在面向对象的中,类与类之间存在三种关系:依赖关系.组合关系.继承关系. 1.依赖关系:将一个类的类名或对象当做参数传递给另一个函数被 ...

  3. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  4. python面向对象(二)——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  5. Kotlin入门(13)类成员的众生相

    上一篇文章介绍了类的简单定义及其构造方式,当时为了方便观察演示结果,在示例代码的构造函数中直接调用toast提示方法,但实际开发是不能这么干的.合理的做法是外部访问类的成员属性或者成员方法,从而获得处 ...

  6. python入门17 类和对象

    类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处)  成员变量(self.变量) 类的方法( @classmethod,cls参数)   成员方法( self参数 )  静态方法 ...

  7. python基础(27):类成员的修饰符、类的特殊成员

    1. 类成员的修饰符 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的定义不同:私 ...

  8. C++入门经典-类成员的可访问性,继承后的可访问性

    1:关键字public.private.protected说明类成员是共有的.私有的,还是保护的.这3个关键字将类划分为3个区域,在public区域的类成员可以在类作用域外被访问,而private区域 ...

  9. Python入门:类与类的继承

    类,是一些有共同特征和行为事物的抽象概念的总和. 1. 定义一个类: 我们使用class来定义一个类,和之前说过的定义函数用def类似.在类里面给变量赋值时,专业术语称之为类的属性. 比如拿可口可乐来 ...

随机推荐

  1. fiddler(四)、断点(转)

    前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神聊天都靠小纸条.某屌丝A男对隔壁小王的隔壁女神C倾慕已久,于是天天小纸条骚扰,无奈中间隔着一个小王,这样小王就负责传小纸条了.有一 ...

  2. Codeforces 979 D. Kuro and GCD and XOR and SUM(异或和,01字典树)

    Codeforces 979 D. Kuro and GCD and XOR and SUM 题目大意:有两种操作:①给一个数v,加入数组a中②给出三个数x,k,s:从当前数组a中找出一个数u满足 u ...

  3. JVM-GC算法(二)-复制算法&&标记整理算法

    这次我和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一篇在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算法 ...

  4. shell编程-定时删除(30天)文件

    1.创建shell touch /opt/auto-del-30-days-ago.sh chmod +x auto-del-30-days-ago.sh 2.编辑shell脚本: vi auto-d ...

  5. 邻居子系统 之 邻居项创建__neigh_create

    概述 IP层输出数据包会根据路由的下一跳查询邻居项,如果不存在则会调用__neigh_create创建邻居项,然后调用邻居项的output函数进行输出: __neigh_create完成邻居项的创建, ...

  6. Oracle 表空间扩容

    1 系统表空间扩容 注:表空间监测或扩容方式很多,这里只提供一种方便使用的方法 1)查询SQL 注:需要输入百分比,如:90,就可查出使用率超过90%的表空间, with t as (select b ...

  7. websphere gc策略调整

    根据应用服务器处理的特性,适配不同的gc策略,验证程序最适合程序的gc策略: server.xml路径: xmlcells/PBOCCell/nodes/PBOCNode01/servers/PBOC ...

  8. PHP 分页+查询

    首先是主页面,与上篇分页页面相同 <table width="100%" border="1" cellpadding="0" cel ...

  9. When Database Sharding is Appropriate DATABASE SHARDING

    w横切 http://www.agildata.com/database-sharding/ When Database Sharding is Appropriate Database Shardi ...

  10. 1-mybatis-概览

    mybatis 当前包如下: 1 annotations 注解相关配置 2 binding 绑定 3 builder 建造器, 主要使用的建造者模式 4 cache 缓存相关 5 cursor 游标 ...