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面对对象小汇总 #####相关推荐

  1. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  2. Python 学习笔记 系统模块 面对对象思想 类和对象 类中的方法与对象 构造函数和析构函数

    一.系统模块: UTC:国际标准时间, 格林尼治天文时间,UTC+8 时间戳:指定时间距离1970.1.1 00:00:00的秒数 time:时间 datetime:日期 calendar:万年历 o ...

  3. python的对象模型_[ Python 源码剖析] 对象模型概述

    Python 是一门 面向对象 语言,实现了一个完整的面向对象体系,简洁而优雅. 与其他面向对象编程语言相比, Python 有自己独特的一面. 这让很多开发人员在学习 Python 时,多少有些无所 ...

  4. python私有变量_[Python]Python中的私有变量

    什么是private StackOverflow上有一个备受关注的问题,想必也是很多刚从Java等支持面向对象范式的编程语言转来的同学想问的:Python的类是否可以定义私有变量(private va ...

  5. python keyboard模块_[python] PyMouse、PyKeyboard用python操作鼠标和键盘

    1.PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用.支持的平台及依赖如下: Linux - Xlib Mac - Quartz, ...

  6. java有几大对象_一个 Java 对象到底有多大?

    阅读本文大概需要 2.8 分钟. 出处:http://u6.gg/swLPg 编写 Java 代码的时候,大多数情况下,我们很少关注一个 Java 对象究竟有多大(占据多少内存),更多的是关注业务与逻 ...

  7. 命名对象实体对象_我的对象命名

    命名对象实体对象 这是最常见的辩论之一. 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的. 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助. 当我创 ...

  8. python工作状态_[Python设计模式] 第16章 上班,干活,下班,加班——状态模式

    题目 用代码模拟一天的工作状态,上午状态好,中午想睡觉,下午渐恢复,加班苦煎熬. 基础版本--函数版 hour = 0 work_finished = False def write_program( ...

  9. python 病毒 基因_#Python#提取基因对应的蛋白质名

    提取基因对应的蛋白质官方名 最开始,是需要将基因跟其编码的蛋白质对应起来,找遍了各种数据库都没发现有相关的注释文件,Uniprot作为处理蛋白质的大佬,结果里都有,肯定有办法能够满足需求. 搜索TP5 ...

最新文章

  1. 【TAMU】最新《时间序列分析》课程笔记
  2. 应用存储和持久化数据卷:存储快照与拓扑调度(至天)
  3. 【知识小课堂】 之 聚合函数
  4. iview table 方法若干
  5. 统计单词数(洛谷-P1308)
  6. 缓存淘汰策略—LRU算法(java代码实现)
  7. 分享一个蛋疼的俄罗斯方块小游戏
  8. JSON序列化视图展示
  9. linux把profile文件删了怎么办,误删Profile后的处理
  10. Cocos2D:塔防游戏制作之旅(九)
  11. Calendar中add()和roll()函数的用法
  12. QQ群排名霸屏技术居然是这样简单
  13. RDLC namespace cannot be upgraded 解决方案
  14. tomcat启动失败:Failed creating java jvm.dll
  15. Github项目:AI消除马赛克实战
  16. npm run build时报错“caniuse-lite is outdated”
  17. JoyOI1027 木瓜地
  18. mysql 主主1032_mysql 主从复制 1032
  19. C2. Pokémon Army (hard version)(贪心分治)
  20. 电池充电IC市场现状研究分析与发展前景预测报告

热门文章

  1. 写给你的数据结构教程(第一天)
  2. python变量自加一_Python个人练习项目 2-1
  3. OpenJudge NOI 1.1 10:超级玛丽游戏
  4. 信息学奥赛一本通(1254:走出迷宫)
  5. 取余运算(信息学奥赛一本通-T1326)
  6. 红与黑(信息学奥赛一本通-T1216)
  7. 计算浮点数相除的余(信息学奥赛一本通-T1029)
  8. 信息学奥赛一本通C++语言——1006:A+B问题
  9. 7.2 MASS批量修改数据(剪切板上传数据)
  10. android xml对象,对象转成xml(并且序列化xml)在android中