欢迎来到python的世界
博客主页:卿云阁欢迎关注点赞收藏⭐️留言
本文由卿云阁原创!
本阶段属于筑基阶段之一,希望各位仙友顺利完成突破
首发时间:2021年12月11日
✉️希望可以和大家一起完成进阶之路!
作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!
目录
0️⃣编程的两大重要思想
1️⃣类和对象
2️⃣私有属性和公有属性
3️⃣类方法、实例方法,静态方法
4️⃣私有方法和公有方法
5️⃣继承
0️⃣✨✨✨编程的两大重要思想✨✨✨
面向过程和面向对象
突然想吃番茄炒蛋
面向过程的做法: 1.去买番茄和鸡蛋 2.洗番茄,打鸡蛋 3.放油,煎鸡蛋,把煎好的鸡蛋放到盘子 里。4.开始炒番茄 5.放在一起炒
面向对象的做法: 点外卖。
1️⃣✨✨✨类和对象✨✨✨
Python中一切对象。
类属性和实例对象属性
class Person2 : count=0 name="Person" #类属性(直接写在类里的变量) def __init__(self, name, age): #初始化方法 self.name1 = name self.age1 = age # self.age实例对象属性 def say_hi(self): #实例方法 print("你好,我叫",self.name1) p1 = Person2('卿云',18) #对象的创建 p1.say_hi() #结果: #runfile('C:/Users/张钊/.spyder-py3/temp.py', wdir='C:/Users/张钊/.spyder-py3') #你好,我叫 卿云
补充:
(1)self
翻译:自;自我;自己。
我建议在形参列表中加上self,它本身要接受的是实例对象可以用其他的参数名,但是为了便于阅读和理解一般选择self。
p1 = Person2('卿云',18)
p1-------------------------->self
注意:类中的方法第一个参数是 self 的才可以被实例调用。
类中带 self 的参数都是实例的,实例对这个参数拥有所有权,即实例中所有的方法都可以使用实例的参数。
(2) 类和对象的创建
class Person2 : #类的创建
p1 = Person2('卿云',18) #对象的创建
1.__new__------------------>创建对象通俗点说有个内存空间(一般不用写)
2.__init__-------------------->刚申请的空间进行初始化
类对象的创建
类属性:(实例对象共有的)
count=0
name="Person"
类方法:
def __init__(self, name, age):
def say_hi(self):
......
实例对象的创建
name1="卿云“
age1=18(age1指向18)
默认属性:
--class--
指向类对象。
--dict--
当前对象的所有属性
3.类属性和实例对象属性
class Person2 : count=0 name="Person" #类属性(直接写在类里的变量) p1=Person2() p2=Person2() print((p1.name,p2.name)) #(p1.name,p2.name)是一个元组 Person2.name="卿云" print((p1.name,p2.name)) p1.name="卿云" p2.name="卿云阁" print((p1.name,p2.name)) #('Person', 'Person') #('卿云', '卿云') #('卿云', '卿云阁')
默认情况下类属性是直接被开放出去的,可以被改变的。由于我们不希望类的属性在类外被改因为这样会使类的封装性变差,所以我们要有私有属性。
2️⃣✨✨✨私有属性和公有属性✨✨✨
class A: __name='卿云' def get_name(): print(A.__name) A.get_name() #A. __name 类外不允许直接访问私有属性 #结果 #卿云
私有属性:通常约定以2个下划线开头但是不以2个下划线结束的属性是私有的其他为公有的。不可以在类外直接访问私有属性但是可以在方法中访问。
3️⃣✨✨✨类方法、实例方法,静态方法✨✨✨
类方法、@classmethod 传递的是类对象的引用。类方法可以被实例调用,也可以被类调用。
类方法由类调用,采用 @classmethod 装饰,至少传入一个cls(代指类本身,类似self)参数。执行类方法时, 自动将调用该方法的类赋值给cls。建议只使用类名.类方法的调用方式。(虽然也可以使用实例名.类方法的方式 调用)class Person: @classmethod #装饰器的作用:在保证原函数不变的情况下,直接给这个函数增加一些功能 def leifangfa(cls,a): print("这是一个类方法" , a) Person.leifangfa(123) p = Person() p.leifangfa(666) func = Person.leifangfa func(111)
实例方法, 传递的是实例对象的引用。
class Person: def eat(self,food):#self可以是aa、bb 等,一般是self print('在吃饭',food) p = Person() p.eat('土豆')
静态方法,@staticmethod 不传递对象的引用(既可以通过类调用,也可以通过示例调用)
class Person: @staticmethod #装饰器的作用:在保证原函数不变的情况下,直接给这个函数增加一些功能 def jingtai(): print("这是一个静态方法") p = Person() p.jingtai() func = Person.jingtai func()
4️⃣✨✨✨私有方法和公有方法✨✨✨
不能直接访问私有方法,但可以在其它方法中访问
class Person: def __init__(self, name, age): self.name = name self.age = age def __check_name(self): #判断name是否为空 if self.name=='':return False else: return True def get_name(self): if self.__check_name():print(self.name, self.age) else: print("NO Value") p = Person('卿云',18) p.get_name() #p.__check_name是非法的
5️⃣✨✨✨继承✨✨✨
派生类
class Person: def __init__(self, name, age): self.name = name self.age = age def say_hi(self): print("你好,我叫{0},{1}岁".format(self.name,self.age)) class Student: def __init__(self, name, age,id): self.name = name self.age = age self.id = id def say_hi(self): Person.say_hi(self) print("id is",self.id ) p1 = Person('卿云',18) p1.say_hi() s1= Student('zhangxveqing',18,'2020180') s1.say_hi() 结果: 你好,我叫卿云,18岁 你好,我叫zhangxveqing,18岁 id is 2020180
类成员的继承与重写
class D: def __init__(self, x, y): self.x = x self.y = y def area(self): pass class C(D): def __init__(self, r): D.__init__(self, r, 0) def area(self): return 3.14* self.x* self.x class R(D): def __init__(self, w,h): D.__init__(self, w,h) def area(self): return self.x* self.y d1=C(2.0) d2=R(2.0,4.0) print(d1.area(),d2.area()) #结果: #12.56 8.0