python基础-面向对象基础知识

二、Self
概念:指向类实例的引用
作用:1、用于明确区分实例变量和局部变量
class Dog:
#1、初始化实例属性
def init(self,name):
self.name =name
#2、访问实例属性
def bark(self):
print(f"{self.name} wow “)
三、类空间 or 实例空间
(1)dict
类的__dict__:包含定义类时的属性、方法
实例的__dict__:包括实例的属性
(2)class
作用:打印实例的类
class My:
def init(self,name):
self.name = name
def bark(self):
print(f”{self.name} wow")
my = My(“xhq”)
print(my.class)
print(my.dict)
print(My.dict)
1、类空间:定义类时,在内存中开辟空间,存储类属性和方法(类空间存储在代码的全局区域)
实例空间:创建类的实例,会在堆中为这个实例分配空间。(实例空间存粗在堆中)
2、类对象指针:类本身也是一个对象,当创建类时,相当于创建一个类对象,而创建实例,实际上是创建类指向类对象的指针
[图片]
四、新式类 or 经典类
1、继承python内置类–新式类(在python3中,未声明父类则默认继承Object类)。未继承python内置类–经典类
2、类和实例只能通过__class__属性关联。
新式类:type(实例)可以查看类名
class My:
pass
my = My()
print(my.class)
经典类:type(实例) 均为”instance“
3、最大区别:
继承顺序(每一个类定义时,定义了方法解析序列,即定义了父类的继承顺序,新式类按照c3算法得到解析序列,经典类按照深度优先算法得到解析序列)
在这里插入图片描述

当类有多个父类(当调用实例对象方法,但是自身没有,就会向父类查找)
#python3中,未声明父类,默认继承object类,
所以A是新式类,按照c3算法定义方法解析序列,确定了父类的继承顺序

class A:
def test(self):
print(“A”)
class B(A):
def test(self):
print(“B”)
class C(A):
def test(self):
print(“C”)
class D(B):
def test(self):
print(“D”)
class E©:
def test(self):
print(“E”)
class F(D,E):
pass
#def test(self):
#print(“F”)
五、静态方法 or 类方法
class A:
name = “changsha”
def __init(self):
self.country =“china”
#普通方法(实例方法),比如传入self(实例本身,会自动传入)
def normal_method(self,name):
print(“name”)
#有修饰称为类方法,必须传入cls参数(代表类对象,会自动传入)
@classmethod
def class_method(cls,name):
print(“name”)
#有修饰称为:静态方法(不需要传入类对象或实例对象)
@staticmethod
def static_method(name):
print(f"{name}")

私有成员
class My:
#python的私有是伪私有,只是将__number改名为_My__number
__number = 10
def init(self,name):
self.name = name
def bark(self):
print(f"{self.__number} wow")

class P(My):
def wow(self):
print(f"{self._My__number}")

my = My(“xhq”)
my.bark()

p=P(‘lyb’)
p.wow()

六、常用魔术方法和属性
__包裹起来,不许直接调用,在某种特定事件下自动执行

(1)init
new

析构函数
(2)del :销毁对象时使用,完成一些资源清理工作

class A:
def del:
print(“A delete”)
a= A()
del a

(3)call:将对象当作函数调用
class A:
def call(self,name):
print(f"{name} 你好")
a = A()
a(‘xhq’)

(4)str:将对象转为字符串,(也可以str()方法)
作业一:
(5)getitem:将对象当作字典
class A:
name = “sc”
age = 25
home = “china”
def getitem(self,item):
#getattr():获取self的item属性
return getattr(self,item).upper()
#将a对象转化为属性,只保留name、age两个属性
def key(self):
return (“name”,“age”)
a=A()
#当实例对象这样写:a[“name”],表示调用魔术方法__getitem__
print(a[“name”])
d1 = dict(a)
print(d1)
六、python自省
七、元类
1、python一切皆对象,类也是一个对象。
2、继承最顶层为object,创建类最顶层的为type(一切类都由他创建)
作业一:定义异常类,当年龄<18,抛出异常
class age_error(Exception):
def init(self,message):
self.message = message
def str(self):
return f"{self.message}"
def age_judge(age):
if age<18:
raise age_error(“年龄未满18~”)
elif age>=18:
raise age_error(“成年了哦~”)

age=int(input(“input age:”))

try:
age_judge(age)
except age_error as e:
print(e)

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值