python遇到对象_### python面对对象小汇总 #####
python面对对象小汇总
类的起名规则
# 所有的类名要求首字母大写,多个单词使用驼峰式命名法 如 ValueError
# 类中方法: 普通方法 类方法 静态方法 魔术方法
class Phone:
# 类属性
brand = "vivo"
price = 2999
type = "Z5 pro"
# 魔术方法 系统默认执行
def __init__(self, owner="徐坤坤"): # init 初始化 ,owner可以外界传参
print("--------init")
self.owner = owner
# 类里面的方法
def call(self):
print("self.......", self)
print(self.note) # 不能保证每个self都有note
print(f"{self.owner} 拿着 {self.brand} 手机 ,跑步,价值 {self.price}")
print("正在法典化")
zzk = Phone("立农")
print(zzk.brand)
print(zzk)
zzk.note = "我是zk的通讯录"
zzk.call()
class Cat:
type = "猫"
def __init__(self, nickname, age, color):
self.nickname = nickname
self.age = age
self.color = color
def eat(self, food):
print(f"{self.nickname} like {food}")
def catch_mouse(self, color, weight):
print(f"{self.nickname} 抓了 {color}色 重{weight}kg 的 杰瑞")
def sleep(self, hour):
if hour < 5:
print("sleep! baby")
else:
print('get up!baby,let"s catch mice')
def show(self):
print("my baby detailed information---->")
print(self.color, self.nickname, self.age)
# 类方法
class Dog:
# 类属性
aa = "阿发"
__age = 18 # 私有化,外界不能直接访问
def __init__(self, name="欢欢"):
self.name = name
def run(self):
print(f"{self.name} run to me")
def eat(self):
print("eat bone")
self.run() # 类中方法的调用,需要通过self
# 以下是类方法 不需要依赖对象
@classmethod
def test(cls):
print(cls) # 指的是 的类
# print(cls.name) 不能用
cls.__age = 20 # 修改类属性
print(f"我是{cls.aa} {cls.__age}") # 类方法不能使用
# 静态方法
@staticmethod # 不能使用self.方法
def test1():
print("-------->静态方法")
print(Dog.__age) # 不能使用类中对象属性
# 静态方法:很类似类方法
# 1.需要加@staticmethod
# 2.无需传递参数
# 3.也只能访问类属性和方法,对象的不行
# 4.加载时机同类方法
类方法 静态方法
不同:
1.装饰器不同
2.类方法是有参数的,静态方法没有参数
相同:
1.只访问类的属性和方法,对象是无法访问的
2.都可以通过类名调用访问
3.都可以在创建对象之前使用,因为是不依赖于对象
class Person:
def __init__(self, name):
print("------->init", self)
self.name = name
def __str__(self):
return "姓名是"
def __new__(cls, *args, **kwargs):
print("------->new")
postion = object.__new__(cls) #
print(postion)
return postion # 地址返给对象self
def __call__(self, name):
print("---------->call")
print("我执行的对象参数是:", name)
def __del__(self): # 程序结束前的最后一步会执行这个
print("结束啦")
# del p # NameError: name 'p' is not defined 删除了,再引用就会报错
p = Person("jack")
print("sdfg", p)
# 查看引用的次数
import sys
t = sys.getrefcount(p) # 自身引用也算一次
print(t)
# 私有化 __属性"
# """
# 好处:
# 1.隐藏属性,不被外界修改
# 2.修改同过函数修改 set属性名,并添加限制条件
# """
# 封装: 1.私有化属性 2.定义公有set和get方法
# 开发中私有化
import random
class Student:
def __init__(self, name, age):
self.name = name
self.__age = age
self.__score = 95
# 老版本
# 定义公有set和get
# set 为了赋值
def setAge(self, age):
if age > 0 and age <= 100:
self.__age = age
else:
print("年龄不在范围内")
# get 用于取值
def getAge(self):
return self.__age
# 新版本
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score > 100:
print("wrong")
else:
self.__score = score
def __str__(self):
return f"姓名:{self.name},age:{self.__age},score:{self.__score}"
zzk = Student("zzk", 16)
zzk.setAge(18)
print(zzk.getAge())
print(zzk)
zzk.score = 99 # 设置了条件
print(zzk.score) # 新版本中,私有化变量可以直接访问
print(zzk.__dir__())
print(zzk._Student__score) # 这种访问方法不推荐
print("---------------------------------------------------")
# 公路 和 车
class Road:
def __init__(self, name, length):
self.name = name
self.length = length
class Car:
def __init__(self, name, speed):
self.name = name
self.speed = speed
def get_time(self, road):
ran_time = random.randint(1, 10)
msg = f"{self.name} 的车 速度:{self.speed} run:{ran_time} on {road}"
print(msg)
def __str__(self):
return self.name+str(self.speed)
# 创建实例对象
r = Road("小路", 12000)
benchi = Car("奇瑞", 120)
benchi.get_time(r.name)
print(benchi)
继承
# 知识点:
# 1.has a 一个类中使用了另外一种自定义的类型
# 2.类型:系统 int float
# 自定义 自定义类 student
#
# 3.is a
# 继承,减少代码冗余
# 父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法,这种行为:重写
# <>
class Person:
def __init__(self, name, love):
self.name = name
self.love = love
def run(self):
print("i can run")
class Student(Person):
def __init__(self, name, love, teacher):
self.teacher = teacher
print("i am student init", self.teacher)
# 如何调用父类的__init__
super(Student, self).__init__(name, love) # super 相当于父类的对象
# 这边相当于一个判断
def run(self):
print("我跑啦,哈哈哈")
zzk = Student("zzk", "烤鸭", "hld")
zzk.run()
print(zzk.love)
class Person:
def __init__(self, no, name, salary):
self.no = no
self.name = name
self.salary = salary
def __str__(self):
msg = f"工号:{self.no} \n 姓名: {self.name} \n 工资:{self.salary}"
return msg
def getSalary(self):
return self.salary
class Worker(Person):
def __init__(self, no, name, salary, hours, per_hour):
super().__init__(no, name, salary)
self.hours = hours
self.per_hour = per_hour
def getSalary(self):
money = self.hours * self.per_hour
self.salary += money
return self.salary
class Saleman(Person):
def __init__(self, no, name, salary, salemoney, percent):
super().__init__(no, name, salary)
self.salemoney = salemoney
self.percent = percent
def getSalary(self):
money = self.salemoney * self.percent
self.salary += money
return self.salary
# 创建对象
w = Worker("001", "康", 2000, 150, 60)
x = w.getSalary()
print("月薪:", x)
print("-----------------------------")
saler = Saleman("002", "lucy", 5000, 5000000, 0.003)
s = saler.getSalary()
print("月薪:", s)
print(s)
# 多继承
class A:
def test(self):
print("-----------AAAAAA")
class B:
def test1(self):
print("----------BBBBB")
class C(A, B):
def test2(self):
print("-----CCCC")
c = C()
c.test()
c.test1()
c.test2()
"""
python 允许多继承
def 子类(父类1,父类2)
多继承搜索顺序
广度优先
python2 是 从左到右,深度优先
"""
print(C.__mro__) # 显示搜索顺序
# isinstance(obj,类) 判断obj 是不是类的对象或者判断obj是不是该子类的对象
python遇到对象_### python面对对象小汇总 #####相关推荐
- SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理
SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...
- Python 学习笔记 系统模块 面对对象思想 类和对象 类中的方法与对象 构造函数和析构函数
一.系统模块: UTC:国际标准时间, 格林尼治天文时间,UTC+8 时间戳:指定时间距离1970.1.1 00:00:00的秒数 time:时间 datetime:日期 calendar:万年历 o ...
- python的对象模型_[ Python 源码剖析] 对象模型概述
Python 是一门 面向对象 语言,实现了一个完整的面向对象体系,简洁而优雅. 与其他面向对象编程语言相比, Python 有自己独特的一面. 这让很多开发人员在学习 Python 时,多少有些无所 ...
- python私有变量_[Python]Python中的私有变量
什么是private StackOverflow上有一个备受关注的问题,想必也是很多刚从Java等支持面向对象范式的编程语言转来的同学想问的:Python的类是否可以定义私有变量(private va ...
- python keyboard模块_[python] PyMouse、PyKeyboard用python操作鼠标和键盘
1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quartz, ...
- java有几大对象_一个 Java 对象到底有多大?
阅读本文大概需要 2.8 分钟. 出处:http://u6.gg/swLPg 编写 Java 代码的时候,大多数情况下,我们很少关注一个 Java 对象究竟有多大(占据多少内存),更多的是关注业务与逻 ...
- 命名对象实体对象_我的对象命名
命名对象实体对象 这是最常见的辩论之一. 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的. 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助. 当我创 ...
- python工作状态_[Python设计模式] 第16章 上班,干活,下班,加班——状态模式
题目 用代码模拟一天的工作状态,上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬. 基础版本--函数版 hour = 0 work_finished = False def write_program( ...
- python 病毒 基因_#Python#提取基因对应的蛋白质名
提取基因对应的蛋白质官方名 最开始,是需要将基因跟其编码的蛋白质对应起来,找遍了各种数据库都没发现有相关的注释文件,Uniprot作为处理蛋白质的大佬,结果里都有,肯定有办法能够满足需求. 搜索TP5 ...
最新文章
- 【TAMU】最新《时间序列分析》课程笔记
- 应用存储和持久化数据卷:存储快照与拓扑调度(至天)
- 【知识小课堂】 之 聚合函数
- iview table 方法若干
- 统计单词数(洛谷-P1308)
- 缓存淘汰策略—LRU算法(java代码实现)
- 分享一个蛋疼的俄罗斯方块小游戏
- JSON序列化视图展示
- linux把profile文件删了怎么办,误删Profile后的处理
- Cocos2D:塔防游戏制作之旅(九)
- Calendar中add()和roll()函数的用法
- QQ群排名霸屏技术居然是这样简单
- RDLC namespace cannot be upgraded 解决方案
- tomcat启动失败:Failed creating java jvm.dll
- Github项目:AI消除马赛克实战
- npm run build时报错“caniuse-lite is outdated”
- JoyOI1027 木瓜地
- mysql 主主1032_mysql 主从复制 1032
- C2. Pokémon Army (hard version)(贪心分治)
- 电池充电IC市场现状研究分析与发展前景预测报告