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 入门 之 类成员相关推荐
- python面向对象类的成员_Python面向对象中类的成员
Python面向对象中类的成员总共有三种,分别是字段.方法和属性 Python Version: 3.5+ 字段 普通字段1 2 3 4 5 6 7 8class A: def __init__(se ...
- python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...
- python中数据读写_【循序渐进学Python——文件中数据的读写以及操作】
[循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] [循序渐进学Python--文件中数据的读写以及操作] 相信大家都想过自己有一天,可以用 ...
- Python数据分析中数据预处理:编码将文字型数据转换为数值型
[小白从小学Python.C.Java] [Python-计算机等级考试二级] [Python-数据分析] Python数据分析中 数据预处理:编码 将文字型数据转换为数值型 选择题 对于以下pyth ...
- python中的类属性和类方法_Python 面向对象,类的属性和 类的方法
面向对象,类的属性和 类的方法 面向对象 类和对象 Python类定义 类属性 类方法 面向过程和面向对象 面向过程 和 面向对象 编程 面向过程 编程:函数式编程,C程序,shell等 面向对象 编 ...
- [YTU]_2618 ( B 求类中数据成员的最大值-类模板)
题目描述 声明一个类模板,类模板中有三个相同类型的数据成员,有一函数来获取这三个数据成员的最大值. 类模板声明如下: template<class numtype> class Max { ...
- python类中最大的_python类的学习笔记(一)
python中一切皆对象,类型的本质就是类. 在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是'类',对象是则是这一类事物中具体的一个. 声明函数的方法: def ...
- C++ : 类的成员函数修改类中数据成员值
遇到一个问题是:在类中有一个数据成员,是public的,在类的成员函数中进行修改,这个类的成员函数可能是要调用多次,想知道是不是每一次调用都有效 写了一个测试函数: #include <iost ...
- java类中数据成员
一.数据成员特点 --表示java类的状态 --声明数据成员必须指定变量名以及所属类型,同时还可以指定其他属性 --数据成员的类型可以是基本数据类型,byte,short,char,int,long, ...
最新文章
- EBB-11、Linux启动流程
- 这个“老婆生成器”说我有5个前妻...
- tensorlfow.saved_model的使用
- 集训队脱单大法:这是一道只能由学姐我自己出数据的水题
- 微博 用户画像_“肖战”被抵制?Python爬虫揭秘肖战粉丝的人群画像
- 扔盘子(51Nod-1279)
- UVA 11806 Cheerleaders (容斥原理)
- php对html加密解密,PHP Mcrypt和HTML5加密API加密/解密
- 论文笔记_S2D.30_2017-CSVT_使用全卷积深度残差网络,作为分类问题,从单目图像估计深度
- 使用 Java Annotation 定制 Ant Junit Report
- LintCode 842: Origami
- html 两个表合并,html如何合并表格
- VeryCD将于本月关闭 P2P历史即将终结
- mysql中有关视图的概念、操作及作用
- 什么是CTP程序化交易:系统入门
- xv6-lab2-syscall
- 微信如何根据经纬度坐标查询具体地理位置
- 触摸屏和显示屏参考文献
- CorelDRAW VBA - 第一个Hello World程序
- 超全的学习资料——Oracle 从入门到精通
热门文章
- win7 java不是内部或外部命令_Win7系统输入javac命令提示“javac不是内部或外部命令”怎么办...
- 笔记本无法识别hdmi设备
- 【Java】流程控制 - 顺序结构、 选择(分支)结构(单分支、双分支、多分支、嵌套)、循环结构(for、while、do...while)、跳转语句(break、continue)
- 真正不需要网关的智能门锁——NBIoT智能门锁
- 解决笔记本散热问题的几种方法
- Mac下的安卓模拟器bluestacks安装apk
- excel填充序列_个性化自己的EXCEL设置1—如何自定义填充序列
- 【每周论文】20210110-BusTr_ConSTGAT_HetETA
- 华为系列故事-迈向新赛道摘抄
- 动手学深度学习:3.5 图像分类初级