python记录_day16 类的成员
一、变量
1、实例变量(又叫字段、属性)
创建对象时给对象赋值
形式:
self.xxx = xxx
访问:
对象名.xxx 只能由对象访问
class Person:
def __init__(self,age,name):
self.name = name #实例变量
self.age = age #实例变量
p1 = Person(18,"iboy")
print(p1.name) #通过对象名访问实例变量 p1.hobby = "打游戏" #这是在当前类中添加一个实例变量
print(p1.hobby)
2、类变量
直接写在类中的变量,给类赋值
形式:
变量名 = 值
访问:
类名/对象名.xxx 类名和对象名都能访问,但是只能通过类名来修改变量值。通过对象名修改,相当于在当前对象中增加了一个实例变量
一般把对象中的共性抽出来作为类变量
class Person:
country = "中国" #类变量
def __init__(self,age,name):
self.name = name #实例变量
self.age = age #实例变量 p1 = Person("","iboy") #对象p1
print(p1.country) #中国
p2 = Person("","jacklove") #对象p2
print(p2.country) #中国
print("--------")
Person.country = "中华" #通过类名 修改了类变量country
print(p1.country) #中华
print(p2.country) #中华
print("--------")
p1.country = "大清" #通过对象名 是在p1中创建了实例变量country, 并没有修改类变量country
print(p1.country) #大清
print(p2.country) #中华
二、方法
1、实例方法
直接写在类中的方法,只能由对象调用
形式:
def 方法名(self,参数):
pass
访问:
对象名.方法名(参数)
class Car:
def run(self):
print("车会跑")
def cul(self,a,b):
print(a+b)
def jump(self):
print("you jump,i push")
#Car.run() #TypeError: run() missing 1 required positional argument: 'self'
c = Car() #创建对象c
c.run()
c.cul(521,1314)
c.jump() 结果:
车会跑
1835
you jump,i push
2、类方法
在声明时加上@classmethod装饰的方法
形式:
@classmethod
def 方法名(cls):
pass
访问:
类名/对象名.方法名()
class Person:
def chi(self): #实例方法
print("人要吃饭")
@classmethod
def he(cls): # 这是类方法,可以通过类和对象名访问
print(cls)
print("人要喝水") Person.he()
p = Person()
p.he() 结果:
<class '__main__.Person'>
人要喝水
<class '__main__.Person'>
人要喝水
3、静态方法
声明时加@staticmethod 装饰的方法,相当于在类中定义的一个普通函数
形式:
@staticmethod
def 方法名():
pass
访问:
类名/对象名.方法名()
class Person:
def chi(self): # 实例方法
print("人在吃")
# 类方法
@classmethod # 类方法
def he(cls): # cls 类
print(cls)
print("我是喝")
@staticmethod
def sleep(): # 在类中定义的一个普通函数,不带参
print("和你睡不等于睡你 -- 姜文")
@staticmethod
def fly(height): # 在类中定义的一个普通函数,带参
print("上天%s" % height)
Person.sleep()
Person.fly(500)
p = Person
p.sleep()
p.fly(500)
结果:
和你睡不等于睡你 -- 姜文
上天500
和你睡不等于睡你 -- 姜文
上天500
静态方法
三、属性方法
通过@property 把一个方法变成一个实例变量来使用,我自称为属性方法,就是本来是一个方法,但是有属性的效果。
形式:
@property
def 方法名(self):
return 值
访问:
对象名.方法名
class Person:
def __init__(self,name,birthday,qq):
self.name = name
self.birthday = birthday
self.qq = qq @property
def age(self):
return 2018-self.birthday
p1 = Person("王三",1995,"")
#print(p1.age()) # TypeError: 'int' object is not callable age是不可调用的
print(p1.age) # 23 可以像属性一样用
print(Person.age) # 通过类名访问访问不到 <property object at 0x0000000001E18EF8>
!!!注意:
函数只能有一个self 参数
函数必须有返回值
不能给该属性赋值 像p1.age = 10 是不行的
四、私有
在变量名或方法名前面加__作为前缀就表示这是私有的
私有的东西只能类自己内部访问
class Person:
def __init__(self, name): # 构造, 创建对象的时候自动调用
self.__name = name # 私有的 def __chi(self): # 私有的
print("我要吃. 疯狂的吃") def he(self):
self.__chi() # 内部调用
print("我是喝", self.__name) # Person.__chi #类访问私有方法 报错 AttributeError: type object 'Person' has no attribute '__chi'
p = Person("哈哈哈")
# p.__chi() #对象访问私有方法 报错 AttributeError: 'Person' object has no attribute '__chi'
#print(p.__name) #对象访问私有实例变量 报错 AttributeError: 'Person' object has no attribute '__name'
p.he() #内部访问 可以 结果:
我要吃. 疯狂的吃
我是喝 哈哈哈
需要注意的是, 对于私有的内容,子类是无法继承的。
python记录_day16 类的成员的更多相关文章
- python 面向对象(类的成员,属性,绑定和非绑定,)
面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...
- python中的类的成员变量以及property函数
1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...
- Python进阶编程 类的成员
类的成员 class A: company_name='老男孩' #静态变量 __iphone='1515151' #私有静态变量 def __init__(self,name,age): #特殊方法 ...
- python基础(26):类的成员(字段、方法、属性)
1. 字段 字段:包括普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同. 普通字段属于对象 静态字段属于类 字段的定义和使用: class Province: # ...
- python记录_day019 类的约束 异常处理 日志
一 .约束 python中约束有两种 第一种,通过抛异常进行约束,这种是子类不按我要求的来,我就给你抛异常(推荐) 操作:提取一个父类. 在父类中给出一个方法.但在方法中不给出任何代码,直接抛异常 # ...
- python记录_day17 类与类之间的关系
一.依赖关系 a类的对象是b类方法的参数 这种关系是我用着你,但你不属于我,比如公司和临时工的关系,是很弱的一种关系 class Zhiwu: def __init__(self,name,atk): ...
- Python入门-类的成员
昨天我们简单的认识了一下面向对象,以及和面向过程之间的区别,从而我们知道了类这个东西,今天我们就来详细的了解一下关于类的一些东西. 一.类的成员 首先, 什么是类的成员,很简单, 你能在类中写什么? ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- 通过WSL在Windows下安装子Linux系统
一.开启开发者模式 步骤: -> 系统设置 -> 更新和安全 -> 针对开发人员 -> 选择开发者模式 点击后会自动安装环境 二.启用WSL 步骤: -> 系统设置 -& ...
- 【原理、命令】Git基本原理、与Svn的区别、命令
一.Git是什么? Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程:Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote ...
- Web前端新手经典学习路线
做前端开发八九年的时间,到2015年的时候,Web前端因为HTML5技术的高速发展,成为IT行业中最受欢迎和未来需求人才发展最好的职业,各个行业都想转行做前端开发,包括一些在校的学生,土木工程,一些不 ...
- _event_spawn
EventId 事件ID Entry 刷新生物或物体的entry,正数为生物,负数为物体 Phase 刷新生物或物体的阶段ID SpawnTime 刷新生物或物体的时间(单位:秒),从阶段开始时开始计 ...
- 分组查询以及having使用
Group by 注意事项:对查询的列有限制,除了聚合函数外,就必须是分组的项 order by总是放在最后 代码示例: select Gender as 性别 ,count (Gender) a ...
- Linux运维人员最常用 150 个命令汇总
linux 命令是对 Linux 系统进行管理的命令.对于 Linux 系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件, Linux 系统管理的命令是它正常运行的核心,与 ...
- C++中的清屏函数
system("cls") 执行控制台命令cls,功能是清屏,清楚所有屏幕显示信息
- 对象反序列化出现类型不匹配的情况(spring-boot-devtools)
目前在做springboot项目的shiro session redis共享功能.但是有一个对象我把它放到redis中之后再取出来就会出现类型不匹配的异常 AuthorizationUser user ...
- SpringBoot 文件上传、下载、设置大小
本文使用SpringBoot的版本为2.0.3.RELEASE 1.上传单个文件 ①html对应的提交表单 <form action="uploadFile" method= ...
- VNPY回测流程
又是好久没更新了,2月这一个月,工作上也忙,正好也是过年.加上前一段时间,一直在爬取某眼查的数据. 对VNPY的使用时间就减少了,不过最近还是完成了vnpy回测结构的思维导图.如下: 值得注意的是,v ...