本文共 5863 字,大约阅读时间需要 19 分钟。
Python面向对象编程区别于Java面向对象编程的小细节。
python3面向对象编程的具体资料可以通过如下链接查看,并且该文档的质量相当较高。()
若是有一天忘记了,可以回顾查看一下代码示例帮助回顾!
class Animal: def __init__(self, name, age): """"成员变量定义""" self.animal_name = name self.animal_age = age def to_string(self): """"成员方法定义""" print("动物的名字叫做:%s, 动物的年龄为:%d" % (self.animal_name,self.animal_age))animal = Animal("Tom", 5)"""以类似于java的toString方法进行比较。"""animal.to_string()
运行结果为:动物的名字叫做:Tom, 动物的年龄为:5
。
animal = Animal("John", 3)animal.address = "北京""""以类似于java的toString方法进行比较。"""print("动物的住址在:%s, " % animal.address,end="")animal.to_string()
运行结果为: 动物的住址在:北京, 动物的名字叫做:John, 动物的年龄为:3
。
__test_group__
、 _test_group
、 __test_group
、 test_group_
. class Animal: def __init__(self, name, age): """"成员变量定义""" self.__animal_name = name # 使用两根连续的下划线,成员变量私有化. self.animal_age = age def to_string(self): """"成员方法定义""" print("动物的名字叫做:%s, 动物的年龄为:%d" % (self.__animal_name,self.animal_age)) def __to_private_string(self): # 使用两根连续的下划线,成员方法私有化. """"成员方法定义""" print("我是私有的方法!","动物的名字叫做:%s, 动物的年龄为:%d" % (self.__animal_name,self.animal_age))animal = Animal("John", 3)"""以类似于java的toString方法进行比较。"""# 显然与private修饰的成员变量一样,可以通过类中的非私有方法在外部调用.# 虽然private修饰的私有成员变量在外部亦可以通过反射强行使用,但是一般情况下是不可以的。animal.to_string()print("--------this-is-dividing-line!---------")print("私有变量--动物名称:%s" % animal._Animal__animal_name)# 调用私有的成员方法,本质上是伪私有。# 也就是说python对方法名进行了出来,可以调用处理后的方法名称进行调用私有方法名称.animal._Animal__to_private_string() # 对象后追加_Animal接私有方法名称.
动物的名字叫做:John, 动物的年龄为:3--------this-is-dividing-line!---------私有变量--动物名称:John我是私有的方法! 动物的名字叫做:John, 动物的年龄为:3
python是没有Java的类似的静态变量的;
但是有一个类变量,类似于Java的静态变量;
但是有有些区别,区别在于Java的可以修改影响到该类的此静态变量,但是python的并不会.
class Animal: count = 0 def __init__(self, name, age): """"成员变量定义""" self.animal_name = name self.animal_age = age Animal.count += 1 def to_string(self): """"成员方法定义""" print("动物的名字叫做:%s, 动物的年龄为:%d" % (self.__animal_name,self.animal_age))Cat = Animal("Tom", 5)Dog = Animal("John", 3)print("测试Dog.count数值:% d." % Dog.count)print("测试Cat.count数值:% d." % Cat.count)Dog.count = 10print("重新测试Cat.count数值:% d." % Cat.count)print("重新测试Dog.count数值:% d." % Dog.count)# 查看类变量的值,结果为2,显然与Java的不一样。print("Animal.count:%d." % Animal.count)Animal.count = 0print("Animal.count>>>:%d." % Animal.count)
运行结果为:
测试Dog.count数值: 2.测试Cat.count数值: 2.重新测试Cat.count数值: 2.重新测试Dog.count数值: 10.Animal.count:2.Animal.count>>>:0.
# 测试类方法与静态方法class Animal: def __init__(self, name, age): """"成员变量定义""" self.animal_name = name self.animal_age = age @classmethod def class_string(cls): """"成员方法定义""" print("我是动物类") @staticmethod def static_string(): print("我是原生测试组static_string.")class Dog(Animal): @classmethod def class_string(cls): print("我是狗类.") @staticmethod def static_string(): print("我是修改的测试组static_string.")DemoDog = Dog("Tom",8)DemoDog.class_string()DemoDog.static_string()print(">"*30)Animal.class_string()Animal.static_string()
结果如下:
我是狗类.我是修改的测试组static_string.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>我是动物类我是原生测试组static_string.
其中类的静态方法其实完全可以将其移除类部分,单独作为一个逻辑部分,我想使用类的静态方法的目的可能正如java中的静态代码块一样吧,只是为了在使用该类的模块是否进行初始化吧!
python提供一些内部的方法,比如__init__; str; __del__等。
在ubuntu操作系统中,terminal交互模式下,可以通过创建一个对应的数据类型,在dir()即可查看具体的内置函数。
比如: list_abc = []
, dir(list_abc)
!即可…
__str__
方法:class Animal: def __init__(self, name, age): """"成员变量定义""" self.animal_name = name self.animal_age = age def __str__(self): """"成员方法定义""" return("动物的名字叫做:%s, 动物的年龄为:%d" % (self.animal_name,self.animal_age))Cat = Animal("Tom", 5)print(Cat)
运行结果为: 动物的名字叫做:Tom, 动物的年龄为:5
!
if __name__ == "__main__": print("被"if __name__ == "__main__":"语句包括的部分.") print("主模块下执行,但是作为导入模块时候是不执行的.")
class Animal(object): def __init__(self, name, age): self.animal_name = name self.animal_age = age def run(self): print("奔跑!") def sleep(self): print("动物睡觉!")class Creature(object): # def __init__(self, name, age): # self.creature_name = name # self.creature_age = age def eat(self): print("进食!") def drink(self): print("饮水!") def sleep(self): print("生物睡觉!")class Mankind(Animal, Creature): def eat(self): print("人类吃熟食!")li_ming = Mankind("LiMing", 18);# 继承!li_ming.sleep()li_ming.run()# override重写!li_ming.eat()
运行结果为:
动物睡觉!奔跑!人类吃熟食!
查看方式:
print("显示加载顺序:", Mankind.__mro__)
结果为:
显示加载顺序: (, , , )
class Animal(): count_num = 0 def __init__(self, name, age): """"成员变量定义""" self.animal_name = name self.animal_age = age Animal.count_num += 1 # 静态方法,与类属性 && 类的实例皆无关. @staticmethod def run(): print("奔跑!") # 类方法,一般结合类属性,与类的实例无关. @classmethod def count(cls): print ("创建对象次数:%d" % cls.count_num)Dog = Animal("Dog", 5)Cat = Animal("Cat", 3)Animal.run()# 类变量,适用范围为,类有关系,实例无关系.print(Animal.count_num)# 类方法.Animal.count()
运行结果为:
奔跑!2创建对象次数:2
转载地址:http://zrwiz.baihongyu.com/