a,设置私有属性和方法
在属性名和方法名前面加两个下划线__
定义为私有属性和私有方法,不能被子类继承
# 1.私有化属性
__name:str
__age:int
b,获取和修改私有属性的值
获取,定义getXXX()
修改,定义setXX()
#2,提供get/set
def get_name(self):
return self.\_\_name
def set_name(self,name:str):
return self.\_\_name
4,方法
①类方法
用装饰器@classmethod标识
@classmethod
def test(cls):
cls.\_\_name='xxx'
②静态方法
用装饰器@staticmethod标识
@staticmethod
def say():
print("hello")
5,魔法方法
①__XX__()函数叫做魔法方法,指的是具有特殊功能的函数
def __str__(self):
return f"名字{self.\_\_name},年龄{self.\_\_age}"
②__init__()
a,__init__():初始化对象
在创建一个对象时默认被调用,不需要手动调用
# 构造函数
def __int__(self):
pass
b,带参数的__init__()方法
# 构造函数
def __init__(self,name:str=“”,age:int=0):#这里的str与int只是需要的类型,给其他类型也不会报错
self.\_\_name=name
self.\_\_age=age
③__str__() --------- 类似Java语言中的toString()方法
a,print输出对象时,默认打印的是对象在内存中的地址
b,如果类中定义__str__方法,则会打印__str__方法中的内容
class Student:
# 1.私有化属性
\_\_name:str
\_\_age:int
def \_\_str\_\_(self):
return f"名字{self.\_\_name},年龄{self.\_\_age}"
二,继承
====
1,单继承
父类,class 父类(object):
class Parent(object):
name='张三 '
def cook(self):
print("正在煮饭\[辣椒炒肉\]")
子类,class 子类(父类):
class Mother(object):
def cook(self):
print("正在煮饭\[红烧肉\]")
2,多继承
子类,class 子类(父类1,父类2)
class Parent(object):
name='张三 '
def cook(self):
print("正在煮饭\[辣椒炒肉\]")
class Mother(object):
def cook(self):
print("正在煮饭\[红烧肉\]")
class Son(Mother,Parent):
def cook\_test(self):
super(Son,self).cook()
print("正在煮饭\[茄子豆角\]")
注意,如果一个类继承多个父类,优先继承父类1的同名属性和方法
3,查看一个类的继承关系
类.__mro__
① print(Parent.mro())
② print(Son.__mro__)
4,子类重写父类的同名属性和方法
class Cs():
def cook(self):
pass
class Parent(Cs):
def cook(self):
print("正在煮饭\[辣椒炒肉\]")
class Mother(Cs):
def cook(self):
print("正在煮饭\[红烧肉\]")
Parent,Mother重写了Cs的重名属性和方法
注意,如果子类重写了父类的同名属性和方法,则会调用子类中的同名属性和方法
5,子类调用父类的同名属性和方法
在子类的同名方法中调用,语法:父类类名.方法(self)
super(),调用父类方法,super().方法()
(适用于 单继承)
三,多态
====
1,概念
多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行效果
2,步骤
a,定义父类,提供父类方法
b,定义子类,重写父类方法
c,传递子类对象给调用者,返回不同的结果
四,完整代码如下
========
面向对象的语言
#定义类
Java class Person{ }
python 首字母需要大写
class Student:
name=‘小宝’
sex:str
age=20
def say(self):
self这个参数是当前这个对象,不需要自己传参
可以通过self去取得自身携带的一些东西,如属性
print(“hello”,self)
实例化
java new Student()
python
s=Student()
s2=Student()
#打印s 肯定是内存地址
print(s)
s.say()
name 实例属性
s.name=“张三”#添加了一个实例属性name 值是张三
Student.name=“haha”#修改了类属性
s有几个name属性? 【name类属性】【name实例属性】
del s.name #删除了name实例属性
s.birth=‘2021-1-1’#不会报错,python是弱类型,对变量没有类型限制,对对象没有属性限制
print(s.name)
print(s2.name)
class Student:
1.私有化属性
__name:str
__age:int
构造函数
def int(self):
pass
构造函数
def init(self,name:str=“”,age:int=0):#这里的str与int只是需要的类型,给其他类型也不会报错
self.__name=name
self.__age=age
#2,提供get/set
def get_name(self):
return self.__name
def set_name(self,name:str):
return self.__name
def str(self):
return f"名字{self.__name},年龄{self.__age}"
def set_name(self, owner, name):
@staticmethod
def say():
print(“hello”)
@classmethod
def test(cls):
cls.__name=‘xxx’
Student.test()
s1=Student(“小宝”,20)
s2=Student()
s3=Student(name=“小黑”)
s4=Student(age=21)
print(s.get_name())
print(s1)
print(s2)
print(s3)
print(s4)
Student.say()
import random
java类都直接或者间接继承object
python类都直接或者间接继承object
如果属性或方法已经冲突,拿前面的
class Parent(object):
name='张三 ’
def cook(self):
print(“正在煮饭[辣椒炒肉]”)
class Mother(object):
def cook(self):
print(“正在煮饭[红烧肉]”)
class Son(Mother,Parent):
pass
class Son(Parent,Mother):
pass
class Son(Mother,Parent):
def cook_test(self):
super(Son,self).cook()
print(“正在煮饭[茄子豆角]”)
s=Son()
# print(Parent.mro())
# print(Son.mro())
s.cook()
s.cook_test()
print(Son.mro())
print(Son.mro)
random.randint()
class Cs():
def cook(self):
pass
class Parent(Cs):
def cook(self):
print(“正在煮饭[辣椒炒肉]”)
class Mother(Cs):
def cook(self):
print(“正在煮饭[红烧肉]”)
class Son(Mother,Parent):
def cook_test(self):
super(Son,self).cook()
print(“正在煮饭[茄子豆角]”)
# 需要一个厨师
def mai_fan(chushi:Cs):
# 断言----会抛出异常
assert isinstance(chushi,Cs)
chushi.cook()
需要一个厨师
def mai_fan(chushi:Cs):
断言----会抛出异常
if isinstance(chushi,Cs) == True:
chushi.cook()
else:
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!