day20 Pyhton学习 面向对象-成员
一.类的成员
class 类名:
# 方法
def __init__(self, 参数1, 参数2....):
# 属性变量
self.属性1 = 参数1
self.属性2 = 参数2
....
# 方法
def method(self):
pass
在上面的代码中__init__和method都属于类的成员方法,又称为实例方法.self.属性1 = 参数1,这个代码的含义是给对象设置属性信息,又被称为成员变量或者实例变量.
二.类的成员-变量
在类中变量分成两大类:
1.实例变量/成员变量
2.类变量
class Person:
# 类变量, 表示所有的该类的对象都共享这个变量.
country = "中国" def __init__(self, name, num, birthday):
# 实例变量(字段) 表示你创建的每⼀个⼈都有这三个变量
self.name = name
self.num = num
self.birthday = birthday
p1 = Person("alex", 18, "1840年06⽉01⽇")
print(p1.name) # alex
print(p1.country) #中国
p2 = Person("wusir", 28, "1894年07⽉25⽇")
print(p2.name) # wusir
print(p2.country) # 中国
p1 = Person("alex", 18, "1840年06⽉01⽇")
p1.country = "大清"
print(p1.name)
print(p1.country) # 大清
p2 = Person("wusir", 28, "1894年07⽉25⽇")
print(p2.name)
print(p2.country) # 中国
执行p1.country = "大清"的时候,并没有改变类中的country.而是添加了p1中的实例变量,这个实例变量只在p1中存在,在p2中不存在
通过程序来记录当前类被创建了多少个对象.
class Foo:
count = 0
def __init__(self):
Foo.count += 1
print(Foo.count) # 0
Foo()
Foo()
Foo()
print(Foo.count) # 3
好了. 来做个简单的总结:
实例变量, 给对象用的.
类变量, 多个对象共享的. 最好是用类名来访问. 这样更加规范.
三.类的成员-方法
1.成员方法(实例方法)
2.静态方法
3.类方法
1.成员方法:
class Computer: # 实例方法(成员方法)
def play(self):
print("我的电脑可以玩儿")
c = Computer()
c.play() # 对象直接去调用实例方法
2.静态方法:静态方法不需要我们给方法传递self. 也就是说. 当出现一个方法不需要使用到成员变量的时候. 就可以选择使用静态方法. 静态方法需要我们在方法上面添加一个@staticmethod
@staticmethod
def fare():
print("我的电脑非常牛B, 可以煎鸡蛋")
Computer.fare() # 类名可以直接访问的
c.fare() # 对象也可以访问. 但最好不要这么干. 以便于区分静态方法和实例方法
3.类方法. 类方法和静态方法差不多, 只不过类方法需要在参数列表中的第一个位置预留一个位置, 通常我们给第一个参数起名字叫cls. 类方法在被调用的时候也不需要传递实例对象. 但是. 系统会自动的把类传递给第一个参数. 类方法在编写的时候, 需要在类方法上面添加@classmethod
class Computer:
def play(self):
print("我的电脑可以玩⼉")
@staticmethod
def fare():
print("我的电脑⾮常⽜B, 可以煎鸡蛋")
@classmethod
def cal(cls, a, b):
print(cls)
return a+b
print(Computer.cal(1, 2)) # 此时会自动的把类名传递给类方法的第一个参数
四 类的成员-属性
属性其实就是通过方法改造过来的一种变量的写法, 在方法上添加一个@property就可以 了
class Person:
def __init__(self):
pass
@property
def age(self):
return 1 p = Person()
age = p.age
print(age)
应用场景: 我们一般保存数据的时候, 不会保存一个人的年龄. 因为随着时间的推移. 每个人的年龄都时刻在改变着. 那如何保存更加完美呢? 很简单. 保存出生年月日. 然后用程序来计算,你当前的年龄. 实时的. 那这个时候就需要进行相应的计算了. 而计算属于一个功能. 当然要写方法里了. 但是对于年龄这个属性而言. 他应该是一个数值. 而不是动作. 所以python就提供了这样一种机制. 通过方法来描述一个属性.
注意:
1. 方法参数只能有一个self
2. 方法上方要写@property
3. 调用的时候, 我们不需要写括号. 直接当成属性变量来用就可以了.
4. 这种套路只能取值. 不能设置值
五.私有变量
class Person:
def __init__(self, laopo, mimi):
self.__laopo = laopo # 私有的
self.__mimi = mimi
alex = Person("wusir", "他俩搞基")
print(alex.__mimi) # 私有的. 谁都不能碰
程序报错. 私有的内容是访问不到的. 但是, 这个访问不到是有一定的局限性的. 比如:
class Person:
def __init__(self, laopo, mimi):
self.__laopo = laopo # 私有的
self.__mimi = mimi
def gaosuni(self):
print("大喇叭开始广播了")
return self.__mimi # 私有的内容.在他自己的方法那里, 他可以任意的进行使用
alex = Person("wusir", "他俩搞基")
mimi = alex.gaosuni() # 通过一个非私有的方法, 访问到了他的秘密.
print(mimi)
私有方法:
class Person:
def __init__(self):
pass
def __yue(self):
print("我要约会")
def job(self):
print("我要⼯作")
# self.__yue()#在自己类中访问自己的其他方法. 哪怕是私有的. 也是自己在用
p = Person()
# Person.____yue()#报错
# p.__yue() # 报错
p.job()
需要注意的是, 对于私有的内容而言. 子类是无法继承的.
class Fu:
__qingfu = "情妇_⼩潘潘"
class Zi(Fu):
pass
print(Zi.__qingfu) # 报错
class 类名:
# ⽅法
def __init__(self, 参数1, 参数2....):
# 属性变量
self.属性1 = 参数1
self.属性2 = 参数2
....
# ⽅法
def method(self):
pass
day20 Pyhton学习 面向对象-成员的更多相关文章
- day20 Pyhton学习 面向对象-类与类之间的关系
一.类与类之间的依赖关系 class Elphant: def __init__(self, name): self.name = name def open(self, ref): print(&q ...
- python语法学习面向对象之继承
python语法学习面向对象之继承 转载自:http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html 只要涉及到面向对象,”类“是必须出 ...
- 转 python语法学习面向对象之继承
传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始 ...
- python学习之-成员信息增删改查
python学习之-成员信息增删改查 主要实现了成员信息的增加,修改,查询,和删除功能,写着玩玩,在写的过程中,遇到的问题,旧新成员信息数据的合并,手机号和邮箱的验证,#!/usr/bin/env p ...
- python学习 day016打卡 面向对象--成员
本节主要内容: 1.类的成员 2.类的成员-变量 3.类的成员-方法 4.类的成员-属性 5.私有 一.类的成员: 能在类中写的内容就是类的成员. class 类名: #方法 def __init__ ...
- Python学习 :面向对象 -- 成员修饰符
成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问,只能通过内部方法来间接访问私有成员 简例:公有成员与私有成员 class Info: country = '中国' ...
- 学习面向对象编程OOP 第二天
好,今天继续学习这个面向对象编程.(根据博客园 小炒花生米写的博客学习而来) 一,封装性 a.把对象的全部属性和全部服务(方法)结合在一起,形成一个不可分割的独立单元 =>对象 b.信息隐蔽,尽 ...
- 学习面向对象编程OOP 第一天
面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...
- Python学习---面向对象的学习[基础]
面向对象 面向对象的三大特性是指:封装.继承和多态. 说明: Python可以函数式编程,也可以面向对象编程 l 面向过程:根据业务逻辑从上到下写垒代码 l 函数式 :将某功能代码封装到函数中,日后便 ...
随机推荐
- RunTime 启动bat程序
bat文件路径 String cmd= PathUtil.appPath + File.separator + "nginx-1.14.2"+ File.separator +&q ...
- ascii unicode utf-8 url编码
ascii 编码 计算机内部,所有信息最终都是一个二进制值 上个世纪60年代,美国制定了一套字符编码ascii ascii 编码就是定义:英语字符与二进制位之间的关系 unixcs unicode编码 ...
- Java高并发系列——检视阅读
Java高并发系列--检视阅读 参考 java高并发系列 liaoxuefeng Java教程 CompletableFuture AQS原理没讲,需要找资料补充. JUC中常见的集合原来没讲,比如C ...
- 痞子衡嵌入式:IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞问题的分析解决经验. 事情缘起恩智浦官方论坛上的一 ...
- selenium常用webdriver api汇总
1.driver.current_url:用于获得当前页面的URL 2.driver.title:用于获取当前页面的标题 3.driver.page_source:用于获取页面html源代码 4.dr ...
- graph attention network(ICLR2018)官方代码详解(tensorflow)-稀疏矩阵版
论文地址:https://arxiv.org/abs/1710.10903 代码地址: https://github.com/Diego999/pyGAT 之前非稀疏矩阵版的解读:https://ww ...
- [剑指Offer]33-根据后序序列判断是否能组成BST
题目 如题. 题解 从序列第一个大于根节点的值往后都是右子树,判断右子树是否都大于根节点. 然后递归判断左右子树是否是BST 代码 class TreeNode { int val = 0; Tree ...
- 论如何学习Extjs
可能现在学习Extjs相比于Vue,在网上的资料要少很多,不过一些旧的视频还是可以帮助你们了解到Extjs是怎么回事. 这里讲一下自己是如何开始学习Extjs语言的: 1.先从Ext的中文文档中学习怎 ...
- MySQL<=>是什么鬼
官网描述 NULL-safe equal. This operator performs an equality comparison like the = operator, but returns ...
- 编译 lua cjson模块
使用文档:http://www.kyne.com.au/~mark/software/lua-cjson-manual.html下载地址:http://www.kyne.com.au/%7Emark/ ...