第三十章 类的设计

#1.
#A:变量名压缩:class语句内开头有两个下划线,但是结尾没有的变量名会自动扩张,如CA类的__X变量会自动扩张为_CA__X
#B:变量名压缩只发生在class内,而且只针对于开头有两个下划线的变量,包括方法和实例属性
class CTest():
    def __init__(self):
        self.__value = ‘a‘
    def __Fun(self):
        return self.__value
Test = CTest()
v0 = Test._CTest__value             #v0 = ‘a‘
v1 = Test._CTest__Fun()             #v1 = ‘a‘
#v2 = Test.__value                  #运行出错
#v3 = Test.__Fun()                  #运行出错

#2.
#A:子类在父类中的搜索是从左到右的
#B:对于大型项目来说,变量名压缩可以起到防止变量名冲突的作用
class CFather0():
    def __init__(self):
        self.__value0 = ‘Father0_0‘
        self.value1 = ‘Father0_1‘
class CFather1():
#由于子类在父类中的搜索时从左到右的,而子类若没有显示调用__init__构造函数,则此构造函数不会被调用
    def __init__(self):
        self.__value0 = ‘Father1_0‘
        self.value1 = ‘Father1_1‘
class CChild(CFather0, CFather1):pass
Child = CChild()
v0 = Child.value1                   #v0 = ‘Father0_1‘
v1 = Child._CFather0__value0        #v1 = ‘Father0_0‘
#v2 = Child._CFather1__value0

class CChild(CFather0, CFather1):
    def __init__(self):
        CFather0.__init__(self)
        CFather1.__init__(self)
Child = CChild()
#由于CFather1的构造函数调用晚于CFather0,所以Child.value1调用的是CFather1中的变量value1
v0 = Child.value1                   #v0 = ‘Father1_1‘
v1 = Child._CFather0__value0        #v1 = ‘Father0_0‘
v2 = Child._CFather1__value0        #v2 = ‘Father1_0‘

#3.
#A:type(), isinstance()
value = 10
str = ‘a‘
b0 = type(value) == int             #b0 = True
t0 = type(value)                    #t0 = <class ‘int‘>

class A:
    pass
class B(A):
    pass
b0 = isinstance(A(), A)             #b0 = True
b1 = type(A()) == A                 #b1 = True
b2 = isinstance(B(), A)             #b2 = True
b3 = type(B()) == A                 #b3 = False

#4.
#A:id()可以显示对象的内存地址
value0 = 1
value1 = 1
v0 = id(value0)                     #v0 = 0x55aeb6b0
v1 = id(value1)                     #v0 = 0x55aeb6b0

  

时间: 2024-12-12 13:45:46

第三十章 类的设计的相关文章

MVC之排球比赛计分程序 ——(三)model类的设计与实现

实体类是现实实体在计算机中的表示.它贯穿于整个架构,负担着在各层次及模块间传递数据的职责.一般来说,实体类可以分为"贫血实体类"和"充血实体类",前者仅仅保存实体的属性,而后者还包含一些实体间的关系与逻辑. 大多情况下,实体类和数据库中的表(这里指实体表,不包括表示多对多对应的关系表)是一一对应的,但这并不是一个限制,在复杂的数据库设计中,有可能出现一个实体类对应多个表,或者交叉对应的情况.在本文的Demo中,实体类和表是一一对应的,并且实体类中的属性和表中的字段也

设计一个程序,程序中有三个类,Triangle,Lader,Circle,

//此程序写出三个类,triangle,lader,circle:其中triangle类具有类型为double的a,b,c边以及周长,面积属性,//具有周长,面积以及修改三边的功能,还有判断能否构成三角形的boolean类.//lader类具有类型为double的上底下底和高,面积属性,具有返回面积的功能//circlle 类具有类型为double的半径,周长和面积.具有返回周长面积的功能.//Triangle类 class triangle{ public double a; public d

三、类模型-应用设计原则和设计模式

精雕细琢,设计良好的类与类关系 [设计原则] 无论项目开发流程用哪种模式,瀑布.迭代.螺旋.敏捷等.只要是面向对象设计,都应该应用设计原则以提高设计质量 设计SOLID原则: 1.设计原则有什么用? 设计原则就像一把尺子,是衡量类设计的尺子.通过分析来判断设计的类是否符合设计原则的这5个标准,进而调整类的设计,达到设计良好的目的. 2.为什么要用设计原则来衡量类设计的好坏? 因为设计原则是为了保证类的可扩展性的,这也是面向对象设计的核心目的. POS机的例子: 我们经过分析后,发现交易类直接依赖

第十章 类、对象与实现

                                                                                      第十章 类.对象与实现   万物都是容器,容器的符号是U:对象就是单个容器的别名.一切皆对象,具有某些相同属性特征的对象归纳成类.对象(Object)是类(Class)的一个实例(Instance):类是对象的模板.如果将对象比作房子,那么类就是房子的蓝图.我们以自然语言去描述世界,而计算机是用各种数据结构去描述世界:数据可以

表达式计算器类的设计2(表达式计算器5)

计算器的github下载地址:https://github.com/ljian1992/calculator 符号表,函数表,变量存储表 表达式计算器,需要支持变量和函数,而变量和函数都是些符号,因此设置一个SymbolTable类来存储这些符号.符号有两种,一种是变量,一种是函数,故在设置一个Storage类存储变量中的值,设置一个FunctionTable类来存储函数.由于这三中类存在着联系,现在在设置一个Calc类来管理它们. SymbolTable类,FunctionTable类,Sto

选课系统的界面设计、类图设计、数据库设计

一.界面设计 不论学生.老师登陆界面统一是下图,根据输入的用户名来判断该进入哪种界面. 学生登陆后的界面: 教师界面:教师登陆后到课程名称界面,选择课程后得到第二张图. 二.类图设计 三.数据库设计 课程:课程编号,开课系别,教师编号,时间,教师,容量,先决条件 教师:教师编号,教师姓名,教师性别,所属学院 学生:学生编号,开课学院,学生专业 教授课程:课程编号,教师编号 上课信息:学生编号,课程编号,上课时间,教室

Python——类的设计

类的设计 这里讨论Python的OOP的设计问题,也就是如何使用类来对有用的对象进行建模.将编写Python中常用的OOP设计模式,例如,继承.组合.委托和工厂.另外介绍一些类设计的概念,例如伪私有属性.多继承等. ================================================================================ Python和OOP Python的OOP实现与Java类似,可以概括为三个概念: 1.[继承]继承是基于Python中的

第十章--类和对象

构造函数: 一种特殊的类成员函数,在创建类对象时被调用,构造函数的名称与类名相同 假设Apple类的构造函数为: class Apple{ Apple(); //默认构造函数 Apple(const char *fname, const char *lname); //构造函数原型 } 用Apple类创建对象,并调用构造函数(有三种方式): Apple a = Apple("张", "三"); Apple a("张", "三"

Unity3D 游戏开发构架篇 ——角色类的设计与持久化

在游戏开发中,游戏角色占了很大的篇幅,可以说游戏中所有的内容都是由主角所带动.这里就介绍一下角色类的设计和持久化. 一.角色类应用场景和设计思想 游戏中的角色类型不一而足,有不同的技能,有不同的属性等等.有些一个玩家只有一个角色,有些一个玩家可以有多个角色.这里就目前项目来描述一下角色类的构造,思路都是类似的. 早期我写角色类都是直接一个Class,然后想到什么属性就往里面添加,如果游戏过程中需要对属性的修改,逻辑判断也写在这个类中,这样必然导致类的庞大和臃肿,最后你自己也忘记了自己写在什么地方