Python学习笔记9-类

1.类的简介
面向对象编程是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。根据类来创建对象被称为实例化。
2.类的创建
创建Dog类
代码

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age

    def sit(self):
        """模拟小狗被命令时下蹲"""
        print(self.name.title() + " is now sitting .")

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")

解释:
第一,关于类名,根据约定,在Python中,首字母大写的名称指的是类。
第二,方法_init_(),这是一种特殊的方法,类似于c++中的构造方法,当你创建类的对象时,Python都会自动运行它;而开头和末尾的两个下划线,这是一种约定,避免Python默认方法与普通方法名称冲突;参数self、name、age,参数self不能少,并且要位于最前面。self是一个指向实例本身的引用,每个与类相关联的方法调用都自动传递实参self,从而让实例能访问类中的属性和方法。
第三,self前缀,以self为前缀的变量都可供类中的方法使用,我们也可以通过类的任意实例来访问这些变量。
第四,方法sit()和roll_over(),因为它们不需要其它参数来提供信息,所以只有一个参数self。

3.类的使用
(1)访问属性或者调用方法
代码

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age

    def sit(self):
        """模拟小狗被命令时下蹲"""
        print(self.name.title() + " is now sitting .")

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")
my_dog = Dog('Tom',3)
print("My dog's name is " + my_dog.name.title()+".")
print("My dog is " + str(my_dog.age) + " years old.")
my_dog.sit()
my_dog.roll_over()  

结果
例子
解释:
首先,我们创建了一个Dog类
然后,我们实例化了一个Dog类的对象my_dog,并初始化了参数
之后,我们通过对象名.属性名来访问属性,并输出一行字
最后,我们通过对象名.方法名来调用方法
(2)修改属性
主要有两种方式

  • 直接修改属性
  • 通过方法修改属性

下面以Dog类作为例子

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.init(name,age)

    def sit(self):
        """模拟小狗被命令时下蹲"""
        print(self.name.title() + " is now sitting .")

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")
    def init(self,name,age):
        """修改属性name和age"""
        self.name = name
        self.age = age
    def show(self):
        """展示属性name和age"""
        print("My dog's name is " + self.name.title() + ".")
        print("My dog is " + str(self.age) + " years old.\n")
        
#初始化        
my_dog = Dog('Tom',5)
my_dog.show()

#直接修改
my_dog.age = 3
my_dog.name = 'jack'
my_dog.show()

#通过方法修改
my_dog.init('jane',10)
my_dog.show()

结果
例子
4.类的继承
(1)继承简介
编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,这时候,继承就发挥作用了。一个类继承另一个类时,它将获得另一个类的所有属性和方法,同时它也可以定义自己的方法和属性;原有的类称为父类,而新类称为子类。
(2)子类的__init__()方法
同c++一样,Python在创建子类的实例时,首先要对父类的属性赋值。
下面看个例子

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.init(name,age)

    def sit(self):
        """模拟小狗被命令时下蹲"""
        print(self.name.title() + " is now sitting .")

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")
    def init(self,name,age):
        """修改属性name和age"""
        self.name = name
        self.age = age
    def show(self):
        """展示属性name和age"""
        print("My dog's name is " + self.name.title() + ".")
        print("My dog is " + str(self.age) + " years old.\n")
        
class Reddog(Dog):
    """子类的__init__()函数"""
    def __init__(self,name,age):
        color = 'red'
        """初始化父类函数"""
        super().__init__(name,age)
my_dog = Reddog('Tom',9)
my_dog.show()

结果
例子
解释:
第一,创建子类时,父类必须包含在当前文件中,且位于子类前面。定义子类时,必须在括号内指定父类名称。
第二,super()是一个特殊函数,帮助Python将父类和子类关联起来。含有super的那一行代码,让子类调用父类的__init__()函数,让子类实例包含父类的所有属性。
5.类的重载
同c++一样,Python子类也可以重载父类的函数,重载后子类的同名函数将覆盖父类的函数。如下

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.init(name,age)

    def sit(self):
        """模拟小狗被命令时下蹲"""
        print(self.name.title() + " is now sitting .")

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + " rolled over!")
    def init(self,name,age):
        """修改属性name和age"""
        self.name = name
        self.age = age
    def show(self):
        """展示属性name和age"""
        print("My dog's name is " + self.name.title() + ".")
        print("My dog is " + str(self.age) + " years old.\n")
        
class Reddog(Dog):
    """子类的__init__()函数"""
    def __init__(self,name,age):
        color = 'red'
        """初始化父类函数"""
        super().__init__(name,age)
    def show(self):
        """重载show函数"""
        print("My dog's name is " + self.name.title() + ".")
        print("My dog is " + str(self.age) + " years old.")
        print("My dog's color is red.\n")
        
my_dog = Reddog('Tom',9)
my_dog.show()

结果
例子
6.导入类
导入类对于我们编写程序来说非常有用,它可以让我们的代码更简明。下面我来简单介绍一下
基本语法
from module_name import class_name
例子
(1)

#我将前面的Reddog类保存在dog模块中
#现在从模块dog中导入Reddog类
from dog import Reddog  
my_dog1 = Reddog('Tom',5)
my_dog1.show()

结果
例子
(2)
代码

#从模块中导入全部类
from dog import * 
my_dog1 = Reddog('Jane',3)
my_dog1.show()

结果
例子
(3)
代码

#导入整个模块
import dog
my_dog1 = dog.Reddog('jack',6)
my_dog1.show()

结果
例子
(参考资料《Python编程从入门到实践》)

发布了45 篇原创文章 · 获赞 52 · 访问量 2825

猜你喜欢

转载自blog.csdn.net/weixin_43520670/article/details/97369523
今日推荐