1. 类的私有成员 -- __

当你遇到重要的数据,功能,(只允许本类使用的一些方法,数据)将其设置成私有成员.

1.1 类的私有静态属性

__name = "meet"    # 加 __

#只能在类的内部进行访问、调用,在类的外部以及派生类不能调用。

1.2 类的私有方法

class A:
def __func(self):
print("in __func") # 只能在类的内部调用

1.3 对象的私有方法

class A:
def __init__(self, name):
self.__name = name # 只能在类的内部调用
# 总结:
类的私有成员,只能在类的内部进行访问、调用,不能在类的外部、子类使用。 python所有的私有成员都是纸老虎,形态虚设。
类在加载时,只要遇到类的私有成员(__),都会在私有成员前加上 _类名;
可以这样查看,但不能这样做。

2. 类的其他方法

2.1 类方法 @classmethod

类方法是将类本身作为对象进行操作的方法。
类方法: 一般就是通过类名去调用的方法,并且自动将类的地址传给cls,
但是如果通过对象调用也可以,但是传的地址还是类名地址.
# 实例化一个对象,记一次数,统计学生个数。
class Student:
count = 0 def __init__(self, name, id):
self.name = name
self.id = id
Student.num_student() # 调用 @classmethod
def num_student(cls): # cls 接受类的地址
cls.count += 1 @classmethod
def getnum(cls):
return cls.count obj1 = Student("alex", 25412)
obj2 = Student("meet", 25413)
print(Student.getnum())
类方法的作用:
1. 得到类名可以实例化对象;
2. 可以操作类的属性。

2.2 静态方法 @staticmethod

不依赖对象与类,其实静态方法就是一个函数。
参数可随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;调用还需函数名。
保证代码规范性,合理划分,以及后续维护性高。
class A:
@staticmethod
def func():
print("这是静态方法!")
print(A.func())

3. 属性 @property

工作中如果遇到一些类似于属性的方法名,可以让其伪装成属性。
property将执行一个函数需要 函数名() 变换成 函数名。
将动态方法伪装成一个属性,使其看起来更合理。

3.1 装饰器法 -- 获取、修改、删除

class Foo:
@property
def AAA(self):
print('get的时候运行我啊') @AAA.setter
def AAA(self,value):
print(value)
print('set的时候运行我啊') @AAA.deleter
def AAA(self):
print('delete的时候运行我啊')
obj = Foo()
obj.AAA # 不加()
obj.AAA = "aaa" # 操作命令,不是改变AAA的值,而是执行被AAA.setter装饰器装饰的函数
del obj.AAA # 操作命令,不是删除AAA,而是执行被AAA.deleter装饰器装饰的函数

3.2 利用实例化对象的方式设置属性

class Foo:
def get_AAA(self):
print('get的时候运行我啊') def set_AAA(self,value):
print(value)
print('set的时候运行我啊') def delete_AAA(self):
print('delete的时候运行我啊') AAA=property(get_AAA,set_AAA,delete_AAA)
#内置property三个参数与get,set,delete一一对应 obj=Foo()
obj.AAA # 不加()
obj.AAA='aaa' # 操作命令,不是改变AAA的值,而是执行set_AAA函数
del obj.AAA # 操作命令,不是删除AAA,而是执行delete_AAA函数

4. 类的内置函数

4.1 isinstance -- 判断对象与类之间的关系

class A:
pass
class B(A):
pass
class C(B):
pass obj = B()
print(isinstance(obj, B)) # True
print(isinstance(obj, A)) # True
print(isinstance(obj, C)) # False # isinstance(obj,class) 判断obj是否是class类的实例化对象,或者obj是否是class派生类的实例化对象,返回Ture/False.

4.2 issubclass -- 判断类与类的关系

class A:
pass class B(A):
pass class C(B):
pass print(issubclass(B, A)) # True
print(issubclass(C, A)) # True
print(issubclass(B, C)) # False # issubclass(cls1,cls2) 判断cls1类是否是cls2的派生类,或者是否是cls2派生类的派生 (判断cls1类是否是cls2的子孙类)

5. 元类type 构建类

type元类:获取对象从属于的类
Python原则是:一切皆对象,其实类也可以理解为'对象',而type元类又称作构建类,python中大多数内置的类(包括object)以及自己定义的类,都是由type元类创造的。
type(str)   # <class 'type'>
print(type(object)) # <class 'type'>
print(isinstance(object, type)) # True
# object类是type元类的一个实例化对象
print(issubclass(type,object)) # True
# object类是type元类的父类

python 25 类的成员的更多相关文章

  1. Python入门-类的成员

    昨天我们简单的认识了一下面向对象,以及和面向过程之间的区别,从而我们知道了类这个东西,今天我们就来详细的了解一下关于类的一些东西. 一.类的成员 首先, 什么是类的成员,很简单, 你能在类中写什么? ...

  2. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

  3. Python面向对象 | 类的成员

    一. 细分类的组成成员 之前咱们讲过类大致分两块区域,静态字段部分和方法部分. 每个区域详细划分又可以分为: class A: company = '阿里巴巴' # 静态变量(静态字段) __tel ...

  4. Python面向对象(类的成员之属性)

    day24 类的成员之属性 class Foo(): def bar(self): print("bar") @property def per(self): ') return ...

  5. Python面向对象(类的成员之方法)

    day24 类的成员之方法 - 普通方法,保存在类中,由对象来调用,self > 对象 - 静态方法,保存在类中,由类直接调用 - 类方法,保存在类中,由类直接调用,cls > 当前类 c ...

  6. Python面向对象(类的成员之字段)

    day24 类的成员之字段 # 字段         - 普通字段,保存在对象中,执行只能通过对象访问         - 静态字段,保存在类中,  执行 可以通过对象访问 也可以通过类访问 clas ...

  7. python的类和对象——类成员番外篇

    学完了面向对象的三大特性,已经get了所有屌丝技能的我们也当一回文艺小青年,来看看类的成员和成员修饰符. 今天‘三’这个数字好亲和~~~类成员可以分为三类:字段.方法和属性 一.字段 首先我们来看看字 ...

  8. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  9. python 面向对象(类的成员,属性,绑定和非绑定,)

    面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...

随机推荐

  1. 【带着canvas去流浪(13)】用Three.js制作简易的MARVEL片头动画(下)

    目录 一. 模型的制作 1.1 生成字体模型 1.2 多表面贴图 二. 镜头及动画 三. 大作业总结 示例代码托管在:http://www.github.com/dashnowords/blogs 博 ...

  2. 关于C#调用WebServices的方法

    2018-1-22 前情是我使用vs在引用高通的webservice时出现了下载错误导致无法引用这个服务,先是在网上查询了这个错误的问题及解决方案,将这个问题与解决方法发给了高通同事,可惜的是他也不清 ...

  3. ListView 控件总结

     1.ListView类           1.常用的基本属性:         (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有 ...

  4. web设计_1_思路总览

    核心思想:结构和样式分离 HTML与CSS 只有充分将页面核心内容和外观设计相分离而获得的灵活性,才能顺利构建出能够满足每个web用户需要的最佳设计方案. 核心要求:灵活性 适应不同的浏览器,适应各种 ...

  5. PHP与ECMAScript_5_常用数组相关函数

    PHP ECMAScript 长度 $length = count($array) length = array.length       增 array_unshift($array, new1,n ...

  6. go 学习笔记之工作空间

    搭建好 Go 的基本环境后,现在可以正式开始 Go 语言的学习之旅,初学时建议在默认的 GOPATH 工作空间规范编写代码,基本目录结构大概是这个样子. . |-- bin | `-- hello.e ...

  7. Code blocks返回错误代码:Process returned -1073741819 (0xC0000005)

    循环语句访问链表时,返回了错误代码: 逐项排查后,发现是由while循环引起的: 附上出错代码: do{ L=L->post; printf("%05d %d %05d\n" ...

  8. Docker Toolbox安装

    公司最近搭建docker环境,其中会遇到一些问题,在这里记录一下. 先来了解一下docker 一.基本概念 1.Docker中基本概念镜像(Image) 提到镜像,有对操作系统有一定认知的都知道,镜像 ...

  9. oracle实战(一)

    一.表空间的创建以及删除 声明:此操作环境为windows,oracle10G 表空间? ORACLE数据库的逻辑单元. 数据库---表空间 一个表空间可以与多个数据文件(物理结构)关联 一个数据库下 ...

  10. 用html和css写一个头部header和左侧菜单栏menu-bar固定的的页面

    这个页面header部分是100%的宽度,60px的高度,左侧是刚好一屏的高度,180的宽度,右侧的部分把剩余的空间占满,刚开始的时候还没怎么接触这样的页面,以为使用js读取浏览的可视化宽高,然后在做 ...