当前位置: 首页 > news >正文

04、Python从入门到癫狂:对象

Python:对象

一、初识对象

1、创建对象

##设计类class Student:name = None;  ##这是成员变量age = None;def sayHi(self): ##成员方法print(f"Hi大家好,我叫{self.name}")##创建对象
stu_1 = Student();##对象属性赋值
stu_1.name = '周杰伦';
stu_2.age = 20;

2、成员方法

##成员方法def 方法名(self,形参1,形参2....,形参N)方法体self关键字是成员方法定义的时候,必须填写的。
·它用来表示类对象自身的意思
·当我们使用类对象调用方法的是,self会自动被python传入
·在方法内部,想要访问类的成员变量,必须使用self
·self关键字,尽管在参数列表中,但是传参的时候可以忽略它

3、构造方法

##构造方法Python类可以使用 __init__()方法,称之为构造方法·在创建类对象(构造类)的时候,会自动执行
·在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用。eg:
class Student:name = None;age = None;address = None;   //如果下面有 构造函数 上面的成员变量可以省去def __init__(self,name,age,address):self.name = name;self.age = age;self.address = address;stu = Student("周杰伦",18,"中国台北")

4、字符串方法

##字符串方法  类似java中的toStringdef __str__(self)return f"name : {name},age: {age},address: {address}";

5、比较方法

##比较方法##小于
def __lt__(self,other)return self.age < other.age; ##小于等于
def __le__(self,other)return self.age <= other.age;  ##相等
def __eq__(self,other)return self.age == other.age;注意 原来是比较内存地址,如果实现了__eq__方法,比较的就是方法里面的内容
如:t1 = Tearcher("苍井空","female",19);
t2 = Tearcher("武藤兰","female",19);
print(t1==t2)  ##就是True
方法功能说明
__init__构造方法,可用于创建类对象的时候设置初始化行为
__str__用于实现类对象转字符串的行为(如 print(obj) 时显示自定义信息)
__lt__用于两个类对象进行小于(<)或大于(>)比较(如 a < b
__le__用于两个类对象进行小于等于(<=)或大于等于(>=)比较(如 a <= b
__eq__用于两个类对象进行相等比较(如 a == b

6、私有成员

##私有成员·私有成员变量:变量名以__开头
·私有成员方法:方法名以__开头##注意:私有成员是供内部使用的,不是对外使用的
##类对象无法访问私有成员
##类中的其他成员可以访问私有成员eg:
class Student2:__name = None;__gender = None;__age = None;def __init__(self,name,gender,age):self.__name = name;self.__gender = gender;self.__age = age;def __sayHi(self):print(f"Hi大家好,我叫{self.__name}")def guessAge(self,age):if self.__age == age:print("真不错,猜对了");else:print("不好意思你猜错了");s1 = Student2("方文山","female",19);
__name = "林俊杰"; ##不报错,但无效
s1.__sayHi();  ##会报错
print(s1.__name); ##会报错
s1.guessAge(19);  ##真不错,猜对了
##私有成员的用法
eg:
class Phone:number = None;__is_5g_open = False;def __init__(self,number):self.number = number;def check5GOpen(self):return self.__is_5g_open;def call_by_5g(self):self.__is_5g_open = True;p1 = Phone("18310103915");
print(f"检查5G是否开启:{p1.check5GOpen()}");
p1.call_by_5g();
print(f"检查5G是否开启:{p1.check5GOpen()}");

二、继承

##语法class 新类(父类):##多继承语法
class 新类(父类1,父类2...,父类N):##注意:如果多继承的父类有相同的属性或方法,则谁先被继承谁优先,即优先使用前面的如果自己有实现,优先使用自己的##eg:
class Phone:phoneNumber = None;picture = None;def __init__(self, phoneNumber):self.phoneNumber = phoneNumber;def call_by_4g(self,number):print(f"4g通话,{self.phoneNumber}正在和{number}通话...")class Phone17Plus(Phone):faceId = None;def call_by_5g(self,number):print(f"5g通话,{self.phoneNumber}正在和{number}通话...")p17 = Phone17Plus("18310103915");
p17.call_by_4g("18748156255");
p17.call_by_5g("18830187927");
##pass占位pass 在 Python 中是一个特殊的语句,它实际上什么也不做。它的主要作用是作为一个占位符,用于那些语法上需要语句但逻辑上暂时不需要执行任何操作的地方。##eg:
class MyClass:pass  # 占位符,表示该类暂时没有其他内容def my_function():pass  # 这里将来会添加函数的具体逻辑
##eg:
if condition_a:do_something()
elif condition_b:pass  # 目前对 condition_b 不采取任何行动
else:do_another_thing()##eg:
for item in my_list:if some_condition(item):process_item(item)else:pass  # 对于不满足条件的项,暂时不做任何处理
##复写:
子类继承父类的成员属性和成员方法后,如果对其“不满意”那么可以进行复写
##调用方式1:
·调用父类成员使用成员变量:父类名.成员变量使用成员方法:父类名.成员方法(self)方式2
·使用super()调用父类成员使用成员变量:super().成员变量使用成员方法:super().成员方法()

三、类型注解

·pycharm自动提示可用方法
·确定传参类型

1、变量的类型注解

##语法(方式1):变量类型注解:
变量:类型var_1:int = 10;
var_2:float = 10.1;
var_3:list = [1,2,3,4];
var_4:tuple = (1,2,3,4);
var_5:set = {1,2,3,4};
var_6:dict = {"a":1,"b":2};
var_7:str = "nihao";详细:
var_8:list[int] = [1,2,3,4];
var_9:tuple[str,bool,int] = ("a",True,1);
var_10:set[int] = {1,2,3};
var_11:dict[str,int]={"age":18};注意:
·元组类型设置类型详细注解,需要将每一个元素都标记出来
·字典类型设置类型详细注解,需要2个类型,第一个是key第二个是value对象类型注解
class Student:pass;stu: Student = Student();
##语法(方式2)
#type: intvar_1 = random.randint(1,10); #type: int
var_2 = json.loads(data);     #type: dict[str,int]
var_3 = Student()                #type: Student

2、函数的类型注解

##语法
def 函数方法名(形参1:类型,形参2:类型,.....) -> 返回值类型:pass;eg:
def add(x:int,y:int) -> int:return x+y;def func(data:list) -> str:pass;

3、Union类型

##语法:
Union[类型,....,类型]from typing import Union;
my_list: list[Union[str,int]] = [1,2,"hello","world"];
my_dict: dict[str,Union[str,int]] = {"name":"周杰伦","age":18}def func(data:Union[int,str]) -> Union[int,str]:pass;

四、多态

多态,指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。class Animal:def speak(self):pass;class Dog(Animal):def speak(self):print("旺旺旺");class Cat(Animal):def speak(self):print("喵喵喵");def make_noise(animal:Animal):animal.speak();dog = Dog();
cat = Cat();make_noise(dog);
make_noise(cat);即:
父类做声明(确定有哪些方法,并不具体实现)
子类做实际工作
1.什么是多态?
多态指的是,同一个行为,使用不同的对象获得不同的状态。如,定义函数(方法),通过类型注解声明需要父类对象,实际传入子类对象进行工作,从而获得不同的工作状态2.什么是抽象类(接口)
包含抽象方法的类,称之为抽象类。抽象方法是指:没有具体实现的方法(pass)称之为抽象方法3.抽象类的作用
多用于做顶层设计(设计标准),以便子类做具体实现。
也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法
并配合多态使用,获得不同的工作状态
http://www.dtcms.com/a/432010.html

相关文章:

  • 云南昆明网站建设公司网站开发环境搭建
  • 营销网站策划方案爱南宁下载安装
  • 钦州网站推广郑州网课老师
  • h5网站建设h精准营销的好处
  • AI从技术到生产力的跨越
  • 庐江县住房和城乡建设局网站苏州吴中区住房和城乡建设局网站
  • 一家专门做母婴的网站杭州百度网站建设
  • 企业营销网站开发建设专家百度云服务器做网站稳定吗
  • 广东一站式网站建设费用建设网站要不要投资钱
  • 20251001——在ANSYS MAXWELL中如何对二维平面图形进行镜像
  • 【LattePanda Mu 开发套件】AI 图像识别网页服务器
  • 昆山网站排名优化wordpress建站安全吗
  • 网站和app设计区别小程序开发定制外包15
  • 网站开发工作好找吗网站开发培训深圳
  • leetcode2.两数相加
  • 上海跨境电商网站制作wordpress 文章设置
  • 网站推广服务 商务服务一页网站首页图如何做
  • 网站建设相关文章商业网站的创建程序
  • 【手撕机器学习 04】手撕线性回归:从“蒙眼下山”彻底理解梯度下降
  • 七个php源码下载的网站网站建设通报
  • 网络技术与网站建设模板网站建设代理商
  • 湘潭网站建设优化技术2 网站内部链接优化
  • php网站开发答案关键词免费网站
  • 树状数组的原理和简单实现:一种使用倍增优化并支持在线 O(log N) 修改、查询的数据结构
  • 网站相关知识百度如何收录网站
  • 视频素材网站大全免费海盐市网站建设
  • 一个公司名可以备案多少个网站空间设计主要做什么
  • STC32G 的PWM调光LED
  • wordpress 建网站 vpn校网站建设方案
  • MySQL索引全面解析:类型作用与最佳实践