python(on)でのオブジェクト指向の詳細な説明

クラスを定義する

# 定义一个类
class Dog():
    pass

# 实例化一个类
d1 = Dog()
d2 = Dog()

# 给实例赋予一个属性name
d1.name = '大黄'

print(d1.name)

__init __()メソッドに属性を追加します

# 定义一个类
class Dog():

    def __init__(self,name,height,blood,power):
        self.name = name
        self.height = height
        self.blood = blood
        self.power = power

# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,10,3)
d2 = Dog('二黑',0.5,10,4)

# 输出实例的属性值
print d1.name
print d2.name

自己属性とデフォルト属性

セルフは、現在のインスタンスを表し、我々はインスタンスを作成すると、テンプレート内の自己は、私たちのインスタンスを表したちができる。。現在のインスタンスのプロパティにアクセスし、自己を流れる電流のインスタンスのメソッドを呼び出します

# 定义一个模板
class Dog():
    # 构造方法
    def __init__(self,name,height,blood,power):
    	# 此时self代表了我们要定义的实例
        self.name = name
        self.height = height
        self.blood = blood
        self.power = power

# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,10,3)
d2 = Dog('二黑',0.5,10,4)

# 输出实例的属性值
print d1.name
print d2.name
  • デフォルトの属性

最初にメソッドを定義すると、デフォルトの属性があります。たとえば、最初の血液量は10滴なので、これがデフォルトの属性です。メソッドのパラメーターで、メソッドの直接の値を渡す必要はありません。属性で定義するだけです:

# 定义一个模板
class Dog():
    # 构造方法
    def __init__(self,name,height,power):
        self.name = name
        self.height = height
        # 设置血量为默认属性,值为10
        self.blood = 10
        self.power = power

# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)

# 输出实例的属性值
print d1.name
print d2.name
print d1.blood
print d2.blood

属性にアクセスして属性を変更する

これは非常に単純で、出力インスタンス属性を出力してから、インスタンス属性を再割り当てします。

# 定义一个模板
class Dog():
    # 构造方法
    def __init__(self,name,height,power):
        self.name = name
        self.height = height
        # 设置血量为默认属性,值为10
        self.blood = 10
        self.power = power

# 实例化一个类并给属性赋值
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)

# 输出实例的属性值
print d1.power
# 修改实例的属性
d1.power = 9999
# 输出
print d1.power

インスタンスを作成し、複数のインスタンスを作成します

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/10/23 16:28
# @Author  : Shadow
# @Site    : 
# @File    : 简单的类.py
# @Software: PyCharm

# 定义一个模板
class Dog():
    # 构造方法
    def __init__(self,name,height,power):
        self.name = name
        self.height = height
        # 设置血量为默认属性,值为10
        self.blood = 10
        self.power = power

# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)

# 输出实例的属性值
print d1.name
print d2.name

# 用id()输出实例的内存地址
print id(d1)
print id(d2)

追加して使用する方法

ここで、Rhubarb Erheiに独自のデータのレポートを開始させたいので、メソッドbark()を追加します。

# 定义一个模板
class Dog():
    # 构造方法
    def __init__(self,name,height,power):
        self.name = name
        self.height = height
        # 设置血量为默认属性,值为10
        self.blood = 10
        self.power = power
    # 添加一个方法bark
    def bark(self):
        print '我是{},身高{},攻击力{},血量{}'.format(self.name,self.height,self.power,self.blood)

# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)
# 使用构造的方法
d1.bark()
d2.bark()

呼び出すだけではつまらないので、attack()メソッドを作成して戦わせましょう!

# 定义一个模板
class Dog():
    # 构造方法
    def __init__(self,name,height,power):
        self.name = name
        self.height = height
        # 设置血量为默认属性,值为10
        self.blood = 10
        self.power = power
    # 添加一个方法bark
    def bark(self):
        print '我是{},身高{},攻击力{},血量{}'.format(self.name,self.height,self.power,self.blood)
    # 再添加一个attack()方法来执行攻击这个行为
    def attack(self,dog):
        dog.blood = dog.blood-self.power
        if dog.blood > 0:
            print '{}的剩余血量为:{}'.format(dog.name,dog.blood)
        else:
            print '{}击杀了{}!'.format(self.name,dog.name)

# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)

# 修改d1的攻击力
d1.power = 999

# 使用构造的方法
d1.bark()
d2.bark()

# 使用attack()方法让d1攻击d2,并输出d2的状态
d1.attack(d2)

メソッドを介してプロパティを変更する

つまり、強度属性を変更できるメソッドを定義し、最小血液量は0であり、負の値はありません。変更されたコード:

# -*- coding: gbk -*-


# 定义一个模板
class Dog():
    # 构造方法
    def __init__(self,name,height,power):
        self.name = name
        self.height = height
        # 设置血量为默认属性,值为10
        self.blood = 10
        self.power = power
    # 添加一个方法bark
    def bark(self):
        print '我是{},身高{},攻击力{},血量{}'.format(self.name,self.height,self.power,self.blood)
    # 修改attack方法,在attack中调用reduce_blood方法
    def attack(self,dog):
        dog.reduce_blood = dog.reduce_blood(self.power)
        if dog.blood > 0:
            print '{}的剩余血量为:{}'.format(dog.name,dog.blood)
        else:
            print '{}击杀了{}!'.format(self.name,dog.name)
    # 构造一个可以修改实例属性值的方法reduce_blood
    def reduce_blood(self,reduce_value):
        if reduce_value > self.blood:
            self.blood = 0
        else:
            self.blood = self.blood - reduce_value
            

# 创建多个实例
d1 = Dog('大黄',0.7,3)
d2 = Dog('二黑',0.5,4)

# 使用构造的方法
# d1.bark()

# 通过方法reduce_blood()修改属性
d1.attack(d2)

# 输出详细属性
d2.bark()

複合トレーニング

メソッド__init __()がnameとbrand(brand)の2つの属性を設定するCarという名前のクラスを作成します。
車の名前とブランドを出力する関数を持つshow()という名前のメソッドを定義します。
run()と呼ばれるメソッドを定義して印刷します。CarXXが実行されています。ここで、XXは車の名前を表し
ますこのクラスに基づいてcarという名前のインスタンスを作成し、最初にその2つの属性を属性から直接出力してから、上記の2つのメソッドを呼び出します。

# -*- coding: gbk -*-

# 创建一个名为Car的对象
class Car:
    
    # 构造__init__方法传值并输出name和brand
    def __init__(self,name,brand):
        self.name = name
        self.brand = brand
    # 构造show方法来输出实例的属性值
    def show(self):
        print self.name
        print self.brand
    # 构造run方法来让汽车跑起来
    def run(self):
        print '{}跑起来了~'.format(self.name)


# 直接输出实例的属性
car = Car('Evo','Mitsubishi')
print car.name,car.brand

# 通过上面两个方法输出实例的属性
car.show()
car.run()
5台

演習1で記述したクラスのインスタンスを5つ作成し、各インスタンスでshowメソッドを呼び出します。

# -*- coding: gbk -*-

# 创建一个名为Car的对象
class Car:
    
    # 构造__init__方法传值并输出name和brand
    def __init__(self,name,brand):
        self.name = name
        self.brand = brand
    # 构造show方法来输出实例的属性值
    def show(self):
        print self.name
        print self.brand
    # 构造run方法来让汽车跑起来
    def run(self):
        print '{}跑起来了~'.format(self.name)


# 创建5个实例,并对每个实例调用show方法
car1 = Car('Evo','三菱')
car2 = Car('翼豹','斯巴鲁')
car3 = Car('Type-R','丰田')
car4 = Car('C63','奔驰')
car5 = Car('GT-R','日产')

# 调用方法
car1.show()
car2.show()
car3.show()
car4.show()
car5.show()

属性nameとweightを含むPigという名前のクラスを作成します。show
()という名前のメソッドを定義してPigの基本情報を出力し、
run()という名前のメソッドを定義して印刷します。'XX:豚肉を食べたことがない。豚が走るのを見てみましょう!'。
異なる豚を表す複数のインスタンスを作成し、各インスタンスで上記の2つのメソッドを呼び出します。

# -*- coding: gbk -*-

# 创建Pig类
class Pig:
    # 构造__init__方法进行传值
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight
    # 构造show方法打印基本信息
    def show(self):
        print '你好!我是{},我{}kg~'.format(self.name,self.weight)
    # 构造run方法输出题目要求内容
    def run(self):
        print '{}:没吃过猪肉,让你看看猪跑~'.format(self.name)

# 实例化多个对象
pig1 = Pig('佩奇',90)
pig2 = Pig('乔治',60)

# pig1调用两个方法
pig1.show()
pig1.run()

# pig2调用两个方法
pig2.show()
pig2.run()
人々の数

演習1を完了するためのCarクラスで、number_of_peopleという名前の属性を追加し、そのデフォルト値を0に設定します。max_peopleという属性を追加します。これは、車の中にはせいぜい数人しか乗れないことを意味します。対応する構築方法を変更し、max_peopleの値を渡します。
set_people()というメソッドを追加します。これにより、車内の人数を設定できますが、max_peopleの制限を超えることはできません。
incremental_people()というメソッドを追加します。このメソッドを呼び出すたびに、車内の人数が1人増えますが、max_peopleの制限を超えることはできません。
reduce_people()というメソッドを追加します。このメソッドを呼び出すたびに、車内の人数が1人減り
ますが、最大で0人に減ります。このクラスに基づいてcarという名前のインスタンスを作成し、属性から直接2人を出力します。プロパティをクリックしてから、上記の2つのメソッドを呼び出します。;車に乗っている人の数を印刷してから、上記の3つのメソッドを複数回呼び出して、車に乗っている人の数を印刷します。

# -*- coding: gbk -*-

# 创建一个名为Car的对象
class Car:
    
    # 构造__init__方法传值并输出name和brand
    def __init__(self,name,brand,max_people=5):
        self.name = name
        self.brand = brand
        self.max_people = max_people
        self.number_of_people = 0
        
    # 构造show方法来输出实例的属性值
    def show(self):
        print '{}:当前车内人数为:{}'.format(self.name,self.number_of_people)

    # 构造run方法来让汽车跑起来
    def run(self):
        print '{}跑起来了~'.format(self.name)

    # 构造set_people方法,设置车内初始人数
    def set_people(self,people):
        if people <= self.max_people:
            self.number_of_people = people
        else:
            print '超载啦!'

    # 构造increase_people方法,每次调用车内人数加一
    def increase_people(self):
        if self.number_of_people+1 <= self.max_people:
            self.number_of_people = self.number_of_people+1
        else:
            print '超载啦!'
            
    # 构造reduce_people方法,每次调用车内人数减一
    def reduce_people(self):
        if self.number_of_people-1 >= 0:
            self.number_of_people = self.number_of_people-1
        else:
            print '车里已经没人了!'

# 实例化对象car    
car = Car('Evo','三菱',5)

# 通过属性实例直接打印出属性name和brand
print car.name,car.brand

# 调用题目中要求的方法,并输出车内人数
car.increase_people()
car.reduce_people()
car.show()

# 按照题目要求,多次调用以上3个方法,并打印车内人数
car.set_people(5)
car.reduce_people()
car.increase_people()
car.reduce_people()
car.reduce_people()
car.increase_people()
car.reduce_people()
car.show()
car.set_people(5)
car.reduce_people()
car.increase_people()
car.reduce_people()
car.show()
car.run()

おすすめ

転載: blog.csdn.net/qq_43573676/article/details/108735176