python3基础语法及实例demo——类和对象

前言:类和对象是面向对象编程中很重要的概念,可以说是核心思想,网上定义和解析一搜一大堆。这里只记录我个人的粗浅理解。

1)定义

在这里插入图片描述

2)表示和示例

① 格式

"""类的表示"""
# 第一种
class Cat(object): 
	pass	
	
# 第二种
class Cat():
	pass	
	
# 第三种
class Cat:
	pass

"""方法和属性"""
class Students():
	ident = 'student' # 类属性
	def __init__(self,name,age):#  __init__ 称为构造函数
		self.name = name #实例属性,在__init__方法中定义
		self.age = age	
	
	@classmethod
	def leimethod(): # 类方法
		pass
	
	@staticmethod
	def jingtaimethod() # 静态方法
		pass
	
	def method(self): # 实例方法,必须有参数self,表示对象本身
		pass

"""初始化一个对象"""
# 格式
类名(参数0,参数1,...)

# 初始化一个类的实例对象,需要传参初始化实例属性
dora = Students(name='Dora',age='20')

"""类继承"""
class Cat(Animal): # 括号中写被继承的类,即父类
	pass

② 举个栗子

  • 先写个类
class Mobile():
	BATTERY = True # 类属性,一般用大写
	def __init__(self, brand, model, color='black'):
        self.color = color
        self.model = model
        self.brand = brand
	@classmethod
	def chongdian(self):
		print("这是类方法")
	
	@staticmethod
	def add():
		print("这是静态方法,和类、对象无关")
		
    def call(self):
        """打电话"""
        print(f"{self} 手机正在打电话。")
  • 实例化和属性、方法调用
>>> Mobile # 类本身
<class '__main__.Mobile'>
>>> Mobile(brand='Huawei',model='Mate40') # 实例化一个对象
<__main__.Mobile object at 0x000002AAD351AB50>

>>> Mobile() # 如果有实例属性,实例化时必须传参
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    Mobile()
TypeError: __init__() missing 2 required positional arguments: 'brand' and 'model'

>>> Mobile.BATTERY # 类属性可以通过类直接调用
True
>>> huawei_mate40 = Mobile(brand='Huawei',model='Mate40')
>>> huawei_mate40.BATTERY # 类属性也可以通过对象调用
True

>>> Mobile.add() # 静态方法可通过类调用
这是静态方法,和类、对象无关
>>> huawei_mate40.add() # 静态方法可通过对象调用
这是静态方法,和类、对象无关

>>> Mobile.chongdian() # 类方法可以通过类调用
这是类方法
>>> huawei_mate40.chongdian() # 类方法也可以通过对象调用
这是类方法

>>> Mobile.call() # 实例方法不能通过类调用
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    Mobile.call()
TypeError: call() missing 1 required positional argument: 'self'
>>> huawei_mate40.call() # 实例方法只能由对象调用
<__main__.Mobile object at 0x000002AAD351AC10>手机正在打电话。
  • 类继承
class Mobile():
	BATTERY = True # 类属性,一般用大写
	def __init__(self, brand, model):
        self.model = model
        self.brand = brand
        		
    def call(self):
        """打电话"""
        print(f"{self} 手机正在打电话。")
        
class SmartPhone(Mobile): # SmartPhone继承Mobile

    def play_game(self):
        print("玩游戏。")

iphone = SmartPhone('iphone12', 'apple') # 初始化一个SmartPhone对象
iphone.play_game() # 调用SmartPhone的实例方法
iphone.call() # 调用父类Mobile的实例方法
  • 多继承,如果多个父类存在同名方法,调用顺序遵循就近原则,从左到右。下面举例说明
		
>>> class A:
	def amethod(self):
		print("这是A的实例方法")
	def same(self):
		print("同名A")
		
>>> class B:
	def bmethod(self):
		print("这是B的实例方法")
	def same(self):
		print("同名B")
		
>>> class C(A,B): # C继承2个父类
	def cmethod(self):
		print("这是C的实例方法")
		
>>> C().same() # 同名方法,默认调用近的那个
同名A
>>> C.__mro__ # 可通过__mro__查看调用顺序
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
  • 重构,其实就是定义子类时重写父类的同名方法
class Mobile():
	BATTERY = True # 类属性,一般用大写
	def __init__(self, brand, model):
        self.model = model
        self.brand = brand
        		
    def call(self):
        """打电话"""
        print(f"{self} 手机正在打电话。")
        
class SmartPhone(Mobile): # SmartPhone继承Mobile
    
    def call(self): # 重写call方法,直接重构
        print("重构call方法")

    def play_game(self):
        print("玩游戏。")

>>> huawei_mate40 = SmartPhone(model='mate40',brand='huawei')
>>> huawei_mate40.call() # 调用同名方法时使用子类重构的方法
重构call方法        
  • 超继承,super继承,既想保留父类特性,也想增加子类特性
class Mobile():
    BATTERY = True  # 类属性,一般用大写

    def __init__(self, brand, model):
        self.model = model
        self.brand = brand

    def call(self):
        """打电话"""
        print(f"{self} 手机正在打电话。")


class SmartPhone(Mobile):
    def __init__(self, brand, model, color='black'):
        super().__init__(brand, model)  # TODO:注意一下书写格式
        self.color = color

    def call(self):  # 重写call方法,先继承后重构
        """打电话"""
        super().call()
        print("边打电话边录音")
	
>>> SmartPhone("huawei","mate40","white").call() # 继承父类,加上子类
<__main__.SmartPhone object at 0x000002AAD3547A00> 手机正在打电话。
边打电话边录音	
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值