python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等) (2)

1.类的定义,我们是用到了关键字class,就和我们函数定义用到的关键字def一样,定义的类型如下所示。

class 类名(父类名): \'类的文档字符串\' 类体 这里的类体包括方法(函数)和静态属性 在实际的过程中,很多人分不清楚什么是函数,什么是方法?其实方法和函数本质上没有区别,主要的区别为:函数:如果是类名调用,那么我们就叫函数。方法:如果是实例化对象调用,那么我们就叫做方法。

2.属性(变量)有两种一个是静态属性(静态变量)和实例化属性(实例化变量)

1)静态属性(静态变量)的引用:

class Person: #定义一个人类 role = \'person\' #人的角色属性都是人 def walk(self): #人都可以走路,也就是有一个走路方法 print("person is walking...") print(Person.role) #查看人的role属性

2)实例化属性(实例化变量)的引用:

实例化的过程就是类——>对象的过程,实例化对象和self指向的是同一个内存地址的空间,可以理解为是同一个。

原本我们只有一个Person类,在这个过程中,产生了一个egg对象,有自己具体的名字、攻击力和生命值。

语法:对象名 = 类名(参数)

# 先进行实例化 egg = Person(\'egon\') #类名()就等于在执行Person.__init__() #执行完__init__()就会返回一个对象。这个对象类似一个字典,存着属于这个人本身的一些属性和方法。 print(egg.name) #查看属性直接 对象名.属性名

3.__init__方法的含义

类名() 会自动调用类中的__init__方法

实例化:类名加括号就是实例化,会自动触发init函数的运行,可以用它来为每个实例定制自己的特征。这个__init__方法必须是这个名字,不能够改变的,将实例化变量(实例化属性)与self绑定在一起,也就是和对象绑定在一起。

我们再看一个上面的例子升级版--面向对象的语法基础、练习类的创建和实例化

class Person: # Person 类名 country = \'China\' def __init__(self, name, sex, job, level, hp, weapon, ad): # 这个函数也是执行的 # 这个方法必须叫__init__这个名字,不能够改变的,所有的在一个具体的人物出现之后拥有的属性 # 都可以写在这里 # 这个函数里面的代码,在调用的时候才会执行的。不会在创建类的时候就执行。 print(\'-\' * 20) self.name = name self.sex = sex self.job = job self.level = level self.hp = hp self.weapon = weapon self.ad = ad print(\'*\' * 20) print(self,self.__dict__) # <__main__.Person object at 0x000002AFD568A588> {\'name\': \'zhouqian\', \'sex\': \'不详\', \'job\': \'搓澡工\', \'levle\': 0, \'hp\': 250, \'weapon\': \'搓澡巾\', \'ad\': 1} # zhouqian和self是一个东西,指向的是一个东西 zhouqian = Person(\'zhouqian\', \'不详\', \'搓澡工\', 0, 250, \'搓澡巾\', 1) print(zhouqian) print(zhouqian.__dict__) \'\'\' 输出的结果如下: -------------------- ******************** <__main__.Person object at 0x0000018B63CFD208> {\'name\': \'zhouqian\', \'sex\': \'不详\', \'job\': \'搓澡工\', \'level\': 0, \'hp\': 250, \'weapon\': \'搓澡巾\', \'ad\': 1} <__main__.Person object at 0x0000018B63CFD208> {\'name\': \'zhouqian\', \'sex\': \'不详\', \'job\': \'搓澡工\', \'level\': 0, \'hp\': 250, \'weapon\': \'搓澡巾\', \'ad\': 1} \'\'\' AndreasZhou = Person(\'AndreasZhou\', \'male\', \'法师\', 100, 500, \'打狗棍\', 1000) print(AndreasZhou, AndreasZhou.__dict__) print(zhouqian, zhouqian.__dict__) \'\'\' 输出的结果为: -------------------- ******************** <__main__.Person object at 0x000001AC3AC58688> {\'name\': \'AndreasZhou\', \'sex\': \'male\', \'job\': \'法师\', \'level\': 100, \'hp\': 500, \'weapon\': \'打狗棍\', \'ad\': 1000} <__main__.Person object at 0x000001AC3AC58688> {\'name\': \'AndreasZhou\', \'sex\': \'male\', \'job\': \'法师\', \'level\': 100, \'hp\': 500, \'weapon\': \'打狗棍\', \'ad\': 1000} <__main__.Person object at 0x000001AC3AC44F08> {\'name\': \'zhouqian\', \'sex\': \'不详\', \'job\': \'搓澡工\', \'level\': 0, \'hp\': 250, \'weapon\': \'搓澡巾\', \'ad\': 1} \'\'\' # Person是一个类,zhouqian和AndreasZhou都是这个类的对象 # 类有一个空间,存储的是定义在class中的所有名字 # 每一个对象又拥有自己的空间,通过对象名.__dict__就可以查看到这个对象的属性和值 print(zhouqian, zhouqian.__dict__[\'name\']) # <__main__.Person object at 0x0000022D7F7E4F88> alex # 通过上面这个方法,我们可以获取到字典中的键值所对应的值。 # 但是上面的获取步骤有点麻烦,我们的面向对象给了我们一种方法,更加简单的获取到字典的键值所对应的值。 print(zhouqian, zhouqian.name) # <__main__.Person object at 0x000001FFBC9F4F88> alex # 直接通过上面的方法取到值,这个值是表示属性的值查看。通过实例化对象zhouqian.属性name,就可以获取到相应的值。 # 同时,我们也可以进行属性值的修改。 zhouqian.name = \'zhouqiansb\' # 属性的修改 print(zhouqian.name) # alexsb # 同时,我们也可以增加属性 zhouqian.money = 100 # 属性的增加 print(zhouqian.__dict__, zhouqian.money) # {\'name\': \'zhouqiansb\', \'sex\': \'不详\', \'job\': \'搓澡工\', \'level\': 0, \'hp\': 250, \'weapon\': \'搓澡巾\', \'ad\': 1, \'money\': 100} 100 # 属性的删除 del zhouqian.money # 属性的删除 print(zhouqian.__dict__) # {\'name\': \'zhouqiansb\', \'sex\': \'不详\', \'job\': \'搓澡工\', \'level\': 0, \'hp\': 250, \'weapon\': \'搓澡巾\', \'ad\': 1} print(Person.country) # China Person.country = \'dasd\' print(Person.country) # dasd del Person.country print(Person.country) # type object \'Person\' has no attribute \'country\' Person.name = \'zq\' print(Person.name) # zq print(Person.__dict__) # {\'__module__\': \'__main__\', \'__init__\': <function Person.__init__ at 0x0000020BDE085EE8>, \'__dict__\': <attribute \'__dict__\' of \'Person\' objects>, \'__weakref__\': <attribute \'__weakref__\' of \'Person\' objects>, \'__doc__\': None, \'name\': \'zq\'}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdxxf.html