Python 入门 之 类成员
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 入门 之 类成员的更多相关文章
- Python 入门 之 类的约束以及super()剖析
		Python 入门 之 类的约束以及super()剖析 1.类的约束 第一版: class WechatPay: def pay(self): print("微信支付") clas ... 
- Python 入门 之  类的三大关系(依赖 / 组合/ 继承关系)
		Python 入门 之 类的三大关系(依赖 / 组合/ 继承关系) 在面向对象的中,类与类之间存在三种关系:依赖关系.组合关系.继承关系. 1.依赖关系:将一个类的类名或对象当做参数传递给另一个函数被 ... 
- python 面向对象和类成员和异常处理
		python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ... 
- python面向对象(二)——类成员
		Python面向对象 类成员 1.字段 普通字段 属于对象 静态字段 属于类 2.方法 普通方法 触发者是对象 括号里至少一个参数 se ... 
- Kotlin入门(13)类成员的众生相
		上一篇文章介绍了类的简单定义及其构造方式,当时为了方便观察演示结果,在示例代码的构造函数中直接调用toast提示方法,但实际开发是不能这么干的.合理的做法是外部访问类的成员属性或者成员方法,从而获得处 ... 
- python入门17 类和对象
		类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处) 成员变量(self.变量) 类的方法( @classmethod,cls参数) 成员方法( self参数 ) 静态方法 ... 
- python基础(27):类成员的修饰符、类的特殊成员
		1. 类成员的修饰符 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的定义不同:私 ... 
- C++入门经典-类成员的可访问性,继承后的可访问性
		1:关键字public.private.protected说明类成员是共有的.私有的,还是保护的.这3个关键字将类划分为3个区域,在public区域的类成员可以在类作用域外被访问,而private区域 ... 
- Python入门:类与类的继承
		类,是一些有共同特征和行为事物的抽象概念的总和. 1. 定义一个类: 我们使用class来定义一个类,和之前说过的定义函数用def类似.在类里面给变量赋值时,专业术语称之为类的属性. 比如拿可口可乐来 ... 
随机推荐
- uimgr 子控件主动往管理类注册自己
			/// <summary> /// 供UIBehaviour调用,UIBehaviour每个控件都会动态挂载,并且在awake里面调用,注册自己 /// </summary> ... 
- Java Date转Json报错解决方案
			报错信息为: Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImp ... 
- System.Runtime.CompilerServices.Unsafe
			System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.CompilerServices.Un ... 
- Mysql general_log 日志详解
			开启 general log 将所有到达MySQL Server的SQL语句记录下来. 一般不会开启开功能,因为log的量会非常庞大.但个别情况下可能会临时的开一会儿general log以供排障使 ... 
- vsftpd 配置上传失败553
			1查看ftp服务 ftp://ftpuser:123456@10.11.102.58:8023 2 getsebool -a | grep ftp 临时关闭 [root@xuegod63~]# get ... 
- layui 表单遇到的小问题
			select中的option 居中显示 /*select显示的option居中*/ /*.layui-select-title input{ text-align: center; }*/ /*opt ... 
- 反射 go
			reflect.Valueof 到底是个什么? 反射值对象(reflect.Value)提供一系列方法进行零值和空判定,如下表所示. 反射值对象的零值和有效性判断方法 方 法 说 明 IsNil() ... 
- np.array()与np.asarray()区别
			1. 数据源a是数组ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会.也就是说改变a的值,b不会. # 数据源a是列表时,两者没区别 a=[[1,2,3],[4 ... 
- Appium移动自动化测试(二)之appuim + 夜神模拟器
			环境搭建起来之后, 就可以开始移动自动化了. 但是使用自带的AVD开启模拟器, 速度实在太慢. 于是用夜神来做替代, 稍微能够有一些提速. 启动appuim 打开Appium,点击右上角Start按钮 ... 
- URL encoding(URL编码)
			URL encoding(URL编码),也称作百分号编码(Percent-encoding),是指特定上下文的统一资源定位符(URL)编码机制UrlEncode:将字符串以URL编码返回值:字符串函数 ... 
