第九章 类

本文详细介绍了如何在Python中定义类,包括构造函数、析构函数、属性、静态方法、继承以及实例化过程。还展示了如何重写父类的方法和使用属性。
摘要由CSDN通过智能技术生成

定义类

class Dog:

    # 构造函数,第一个参数必须是self
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.__gender = "male" # 私有变量,双下划线开头;只能在类内部使用,子类也无法访问
        self.__master = "John"

	# 析构函数
    def __del__(self):
        print("Delete dog")

	# 转为字符串
    def __repr__(self):
        return f"{self.name}({self.age})"

	# 静态方法,使用@classmethod标记
	@classmethod
    def CreateDogName(cls, name):
        dogName = f"little {name}"
        return dogName

	# 定义一个属性,类似于C#的属性,不能以函数的方式访问
    @property
    def Gender(self):
        return self.__gender

	# 给属性添加Setter,需要跟原property同名,如果定义Setter则属性为只读状态
    @Gender.setter
    def Gender(self, value):
        self.__gender = value

	# 给属性添加Deleter
    @Gender.deleter
    def Gender(self):
        print("Delete gender")
        del self.__gender 

	# 添加property的第二种方式
	def MasterGetter(self):
        return self.__master
    
    def MasterSetter(self, value):
        self.__master = value

    def MasterDeleter(self):
        del self.__master

    Master = property(fget=MasterGetter, fset=MasterSetter, fdel=MasterDeleter)


    # 普通成员函数 第一个参数也需要时self
    def Sit(self):
        print(f"{self.name} sit down")
        
    def RollOver(self):
        print(f"{self.name} rolled over")
        
	# 私有函数 双下划线开头 
	# 只能在类内部使用,子类也无法访问
	def __Bark(self):
        print(f"{self.name} bark")

# 创建对象
myDog = Dog(Dog.CreateDogName("aaa"), 6)
print(f"Dog {myDog.name} is create")

# 函数调用
myDog.Sit()
# 访问属性
print(myDog.Gender)
# 调用属性的Setter
myDog.Gender = "female" 

del myDog

# 继承
class SheepDog(Dog):

    # 调用父类构造函数
    def __init__(self, name, age, speed):
        super().__init__(name, age)
        self.speed = speed

    def ChaseFlyingDisc(self):
        print(f"{self.name} is chasing flying disc, speed is {self.speed}")

    # 重写父类方法
    def RollOver(self):
        print(f"{self.name} rolled over and bark")

mySheepDog = SheepDog("bbb", 10, 20)
mySheepDog.Sit()
mySheepDog.RollOver()
mySheepDog.ChaseFlyingDisc()

导入类

# module名称是包含类生命的python文件名称
# 1. 导入module中的一个类
# from dog import Dog
# from dog import SheepDog

# 2.导入module中的多个类
# from dog import Dog, SheepDog

# 3.导入整个module
# 使用时需要module.className访问:dog.Dog 上面两种方式不需要添加module名称
# 也可以创建别名: import dog as DD => DD.Dog
import dog 

# 4. 导入module的所有类 不推荐
from dog import *

# 5. 使用别名
from dog import Dog as D

# 6. 引入标准库
from random import randint

# 创建对象
myDog = Dog("aaa", 6)
myDogAlias = D("bbb", 7)
myDogAlias.Sit()

print(randint(1, 6))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值