day21の概要

組み合わせ

?1.どのような組み合わせである
。コンビネーションは、別のオブジェクト、オブジェクトのプロパティを参照する
?2.なぜ組み合わせを使用して
組み合わせ、コードの冗長性を削減するために、同じ目的を継承します。
3の組み合わせを使用する方法:

# 选课系统: 老师类,学生类,老师与学生都有名字,年龄,性别
# class People:
#     def __init__(self, name, age, sex, year, month, day):
#         self.name = name
#         self.age = age
#         self.sex = sex
#         self.year = year
#         self.month = month
#         self.day = day
#
#     def tell_birth(self):
#         print(f'''
#         === 出生年月日 ===
#         年: {self.year}
#         月: {self.month}
#         日: {self.day}
#         ''')
#
#
# class Teacher(People):
#     def __init__(self, name, age, sex, year, month, day):
#         super().__init__(name, age, sex,  year, month, day)
#
#
# class Student(People):
#     def __init__(self, name, age, sex,  year, month, day):
#         super().__init__(name, age, sex,  year, month, day)
#
#
# tea1 = Teacher('tank', 17, 'male', 2002, 1, 1)
# tea1.tell_birth()
#
# stu1 = Student('大壮壮', 69, 'female', 1950, 11, 11)
# stu1.tell_birth()


# 组合实现:
class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

class Teacher(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)

class Student(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)


# 日期类
class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def tell_birth(self):
        print(f'''
        === 出生年月日 ===
        年: {self.year}
        月: {self.month}
        日: {self.day}
        ''')
tea1 = Teacher('tank', 17, 'male')
date_obj = Date(2002, 1, 1)
# date_obj.tell_birth()
# 将date对象赋值到tea1对象的date属性中
tea1.date = date_obj
tea1.date.tell_birth()

概要:
継承:
どのような子と親クラスの所属との関係が何であるかのクラスとクラス間の関係、。
組み合わせ:
サブジェクトとオブジェクト間の関係、どのような種類のオブジェクト間の関係は、別のオブジェクトを持っているものの。

組み合わせ演習

'''
选课系统需求:
    1.学生类,老师类, 学生和老师都有课程属性, 每一门课程都是一个对象.
        课程: 课程名字,课程周期,课程价钱

    2.学生和老师都有选择课程的功能, 还有打印所有课程的功能.
'''
class People:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    # 添加一门课程方法
    def add_course(self, course_obj):
        self.course_list.append(course_obj)

    # 打印当前对象中所有课程的课程信息
    def tell_all_course(self):
        # 拿到当前对象的课程列表,列表中存放的是一个个的课程对象
        for course_obj in self.course_list:

            # 每一个课程对象调用查看课程信息的方法
            course_obj.tell_course_info()

class Teacher(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)
        # 用来存放课程对象
        self.course_list = []


class Student(People):
    def __init__(self, name, age, sex):
        super().__init__(name, age, sex)
        self.course_list = []

# 课程类
class Course:
    def __init__(self, course_name, course_period, course_price):
        # 课程名称\周期\价格
        self.course_name = course_name
        self.course_period = course_period
        self.course_price = course_price

    def tell_course_info(self):
        print(f'''
        课程名称: {self.course_name}
        课程周期: {self.course_period}
        课程价钱: {self.course_price}
        ''')


tea1 = Teacher('tank', 17, 'male')
stu1 = Student('张全蛋', 20, 'female')
python_obj = Course('python', 6, 2.0)
linux_obj = Course('linux', 6, 1.0)

# 添加python与linux课程
tea1.add_course(python_obj)
tea1.add_course(linux_obj)
# tea1.course_list[0].tell_course_info()
tea1.tell_all_course()

パッケージ

1.パッケージとは何ですか?
メタファー:
手紙:例えば、密閉袋に入れた。
パッキング:例えば、猫の束を入れて、犬が、ニックは袋にロードされた
パッケージは、属性(特性やスキル)の束を指し、パッケージにオブジェクトの
目的は、プロパティの仕方を取得することができ、オブジェクトに格納されたデータを取ることです「」。。
比喩:袋のようなオブジェクトは、バッグはパイルの特性の中にあった。
2.パッケージはなぜ?
目的の容易なアクセスのためにパッケージング。。、プロパティは、オブジェクトの属性によって得ることができる方法
3方法の包装
機能:変数--->データ属性
スキル:機能--->メソッドプロパティを
クラス内で、バンチ属性(特性やスキル)を定義する。
オブジェクトを介し。 =属性値属性

アクセス制限メカニズム

?1.アクセス制限メカニズムは何である
__の始まりを属性には、クラス、すべてのデータの属性とメソッド内で定義されたが、
外は__授業を始める内部プロパティに「直接」アクセスできないように、Pythonの内部に隠されます。
例えば: = __name__「戦車」
?2のアクセス制限メカニズムの目的
。プライバシーの属性と属性の束を簡単に外部からアクセスできません、非表示にすることができ、直接ではなく、外部の呼び出し
の利点を:
論理的に重要なデータは、それによって確実に、より厳密得。データセキュリティ
インターフェース:プライバシーの属性は、ビジネス・ロジック・インターフェースの処理で行われ、その後、呼び出し側へのインタフェースをカプセル化することで、データを返すことができます。
注意:pythonで、アクセス制限のプロパティを強制しません、クラス内部__プロパティの初め、ちょうど変化を行う。
ダイレクトアクセスのために、名前が変形後に起動することができます。
クラスはFoo:
__name__ =「タンク」#---> _ __クラス名は属性名

# # demo1:
# class Foo:
#
#     # 数据属性
#     __name = 'tank'
#
#     # 方法属性
#     def __run(self):
#         print('running..')
#
#     # 接口: 获取数据接口
#     def get_name(self):
#         return self.__name
#
#     def set_name(self):
#         self.__name = 'jason_sb'
#
# foo = Foo()
# # print(foo.__name)
# # res = foo.get_name()
# # print(res)
# # print(foo._Foo__name)  # --> _Foo__name
# foo.set_name()
# print(foo.get_name())



# demo2:
# class Teacher:
#
#     def __init__(self, name, age, sex):
#         self.__name = name
#         self.__age = age
#         self.__sex = sex
#
#     # 接口: 打印用户信息接口
#     def get_info(self):
#         # 用户认证
#         user = input('user: ').strip()
#         pwd = input('pwd: ').strip()
#         if user == 'tank' and pwd == '123':
#             print(f'''
#             姓名: {self.__name}
#             年龄: {self.__age}
#             性别: {self.__sex}
#             ''')
#
#     # 接口: 修改用户信息接口
#     def set_info(self, name, age, sex):
#         # str1 = 'string'  # str('string')
#         if not isinstance(name, str):
#             raise TypeError('名字必须要使用字符串')
#
#         if not isinstance(age, int):
#             raise TypeError('年龄必须是数字')
#
#         if not isinstance(sex, str):
#             raise TypeError('性别必须要使用字符串')
#
#         self.__name = name
#         self.__age = age
#         self.__sex = sex
#
#
# tea1 = Teacher('tank', 17, 'male')
# # tea1.get_info()
# tea1.set_info('jason_sb', 101, 'female')
# tea1.get_info()


# demo3: ATM


class ATM:
    # 1.插卡
    def __insert_card(self):
        print('插卡')
        pass

    # 2.输入密码
    def __input_pwd(self):
        print('密码验证')
        pass

    # 3.输入取款金额
    def __input_money(self):
        print('输入金额')
        pass

    # 4.开始吐钱
    def __get_money(self):
        print('执行吐钱')
        pass

    # 5.打印账单
    def __print_flow(self):
        print('打印账单')
        pass

    # 取钱直接接口
    def withdraw(self):
        self.__insert_card()
        self.__input_pwd()
        self.__input_money()
        self.__get_money()
        self.__print_flow()
        print('取款程序执行完毕!')


atm = ATM()
atm.withdraw()

プロパティ

1.プロパティは何である
mainメソッドは内部クラスを使用することで、内蔵された装飾のPython。
2.なぜプロパティを使用し
、その目的を使用して、()defのメソッド名()内部クラスメソッドであるとなり(DEF方法)。
オブジェクトは、メソッドを呼び出すと、オブジェクトメソッド()が対象となる。方法(単一の共通データ属性を探して)
どのプロパティを使用3.
@Propertyを

'''
计算人体的bmi: bmi值 = 体重 / (身高 * 身高)


'''
class People:
    def __init__(self, name, weight, height):
        self.name = name
        self.weight = weight
        self.height = height

    @property
    def bmi(self):
        return self.weight / (self.height * self.height)

    # 了解
    @property
    def get_name(self):
        return self.name

    # 改
    @get_name.setter
    def set_name(self, val):
        self.name = val

    # 删除
    @get_name.deleter
    def del_name(self):
        del self.name


p = People('jason', 200, 1.6)
# print(p.bmi())  # 打印动词,看起来不合理
# print(p.bmi)  # ---> p.bmi()

# 注意: 不能对被装饰过的方法属性修改.
# p.bmi = 18


# 了解: 若真要通过此方法修改属性,可以通过另一种方式修改.
print(p.get_name)
p.set_name = 'tank'
print(p.get_name)
# p.del_name()
# print(p.get_name)
del p.del_name
print(p.get_name)

ポリモーフィズム

1.多型は何ですか?
多型は同じものの、様々な形態をいう。
2.多型の目的:
また、多形として知られている多型、継承、多型は、プログラム内の現れである。
ポリモーフィズム目的は、同じ機能の場合には、同じ名前のメソッド名を呼んで、オブジェクトの様々な異なるタイプのを可能にすることです。
親クラス:標準の制服セットの定義。
サブクラス:統一基準の親に従ってください。
マルチ。状態の究極の目標:ユーザーがより簡単に、同じ方法で関数を呼び出すことができるようにするために統一されたサブクラスの仕様の準備、
実現する方法3:
-継承
注:pythonではなく、必須サブクラスは親クラスに従わなければなりません標準、それゆえ抽象クラス。

class Animal:
    # 吃
    def eat(self):
        pass

    # 喝
    def drink(self):
        pass

    # 叫
    def speak(self):
        pass


# 猪
class Pig(Animal):

    # 吃
    def eat(self):
        print('猪在吃饭')
        pass

    # 喝
    def drink(self):
        pass

    def speak(self):
        print('哼哼哼~~~')


# 猫
class Cat:
    # 吃
    def eat(self):
        print('猫在吃饭')
        pass

    # 喝
    def drink(self):
        pass

    def speak(self):
        print('喵喵喵~~')


# 狗
class Dog:
    # 吃
    def eat(self):
        print('狗在吃饭')
        pass

    # 喝
    def drink(self):
        pass

    def speak(self):
        print('汪汪汪~~~')


# 正确教材
pig = Pig()
cat = Cat()
dog = Dog()

pig.speak()
cat.speak()
dog.speak()


# 反面教材
# class Animal:
#     # 吃
#     def eat(self):
#         pass
#
#     # 喝
#     def drink(self):
#         pass
#
#     # 叫
#     def speak(self):
#         pass
#
#
# # 猪
# class Pig(Animal):
#
#     # 吃
#     def eat(self):
#         print('猪在吃饭')
#         pass
#
#     # 喝
#     def drink(self):
#         pass
#
#     def jiao(self):
#         print('哼哼哼~~~')
#
#
# # 猫
# class Cat:
#     # 吃
#     def eat(self):
#         print('猫在吃饭')
#         pass
#
#     # 喝
#     def drink(self):
#         pass
#
#     def han(self):
#         print('喵喵喵~~')
#
#
# # 狗
# class Dog:
#     # 吃
#     def eat(self):
#         print('狗在吃饭')
#         pass
#
#     # 喝
#     def drink(self):
#         pass
#
#     def speak(self):
#         print('汪汪汪~~~')
#
#
# pig = Pig()
# cat = Cat()
# dog = Dog()
#
# pig.speak()
# cat.speak()
# dog.speak()

抽象クラス

1.何ですか?
Abcのモジュールabstract_class
?の目的2.
強制サブクラスは親クラスの標準セットに従わなければなりません。
3.使用方法
インポートABCを

import abc


class Animal(metaclass=abc.ABCMeta):

    # 吃
    @abc.abstractmethod
    def eat(self):
        pass

    # 喝
    @abc.abstractmethod
    def drink(self):
        pass

    # 叫
    @abc.abstractmethod
    def speak(self):
        pass


# 猪
class Pig(Animal):
    # 吃
    def eat(self):
        print('猪在吃饭')
        pass

    # 喝
    def drink(self):
        pass


    def speak(self):
        print('哼哼哼~~~')


    # 派生
    def run(self):
        pass



pig = Pig()

アヒルタイプ

1.タイプのアヒルは何ですか?
そして、あなたはアヒルの種類があり、現在の目標は、の問題が何であるかを知っているが、あなたはアヒルのように見てはいけない
のpythonで、抽象クラスのサブクラスで定義された必須の制限を使用することを推奨していませんが、それが推奨されますアヒルのクラスは、タイプに従ってください
-継承:
貧しいスケーラビリティのカップリングは、プログラムが高すぎる
- :アヒル型の
強い低カップリング、スケーラブルな手順

# 猪
class Pig:
    # 吃
    def eat(self):
        print('猪在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('哼哼哼~~~')


# 猫
class Cat:
    # 吃
    def eat(self):
        print('猫在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('喵喵喵~~')

# 狗
class Dog:
    # 吃
    def eat(self):
        print('狗在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('汪汪汪~~~')

ポリモーフィックオペレーティングxuanji

# 猪
class Pig:
    # 吃
    def eat(self):
        print('猪在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('哼哼哼~~~')


# 猫
class Cat:
    # 吃
    def eat(self):
        print('猫在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('喵喵喵~~')

# 狗
class Dog:
    # 吃
    def eat(self):
        print('狗在吃饭')
        pass
    # 喝
    def drink(self):
        pass
    def speak(self):
        print('汪汪汪~~~')

dog = Dog()
cat = Cat()
pig = Pig()

def BARK(animal):
    animal.speak()

BARK(dog)
BARK(cat)
BARK(pig)


str1 = '1234'
list1 = [1, 2, 3]

print(str1.__len__())
print(list1.__len__())

def LEN(d):
    return d.__len__()

print(LEN(str1))
print(LEN(list1))

print(len(str1))
print(len(list1))

おすすめ

転載: www.cnblogs.com/zhm-cyt/p/11654322.html