类的私有属性 公有属性 继承 多态

Posted flags-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的私有属性 公有属性 继承 多态相关的知识,希望对你有一定的参考价值。

私有属性 && 公有属性

 1 #定义一个最简单的类
 2 class person(object):
 3     hometown = "china" #公有属性,所有类的对象共用的。使用对象.公有属性只会修改自己对象的公有属性,类名.公有属性会把所有对象的公有属性进行修改。
 4     #原因是只要对象不调用公有属性是不会在自己本地创建其内存空间使用类共享的(类的实例化过程),只要本地修改就是在本地创建一个同名的变量而已,相当于局部变量,作用域屏蔽了类的公有属性
 5     #构造函数,接收实例化时候传入参数
 6     def __init__(self, name, sex="man"):
 7         self.name = name #当某个变量需要在类的多个方法中使用就需要在构造函数中将其赋值,这种变量称为类的成员属性
 8         self.__sex = sex #私有属性,只能类的方法调用,对象不能直接访问;对象需要访问可以调用下面get_sex()或者对象名._类名__私有属性 这两种方法
 9     #类的方法
10     def Hello(self):
11         print("i‘m define a person class,my name is %s"%self.name)
12     def print_name(self, name1): #当一个变量只在一个方法中使用可以在方法调用中传入,可以不在构造函数中赋值
13         print("print my name is %s"%name1)
14     def get_sex(self):
15         return self.__sex
16 #类的实例化以及调用功能
17 person1 = person("test person", "man")
18 #类的实例化解析:1、person1 = person("test person") 相当于先申请一块内存名称为person1 ,将实例名和参数传入类 person(person1, "test person"),实例化的对象名就是self,传入的参数就是构造函数的参数。
19 #2、构造函数完成person1.name = "test person"和self=person1赋值后,将内容写入内存空间person1内;在person1.Hello(self)相当person1.Hell0(person1),其中调用self.name就是person1.name;就是步骤1中的"test person"
20 #3、类的实例化过程会自动调用构造函数
21 person1.Hello() #对象调用其方法 i‘m define a person class,my name is test person
22 person1.print_name("zsq")
23 print(person1.get_sex())
24 person1.hometown = "CHINA"
25 person.hometown = "China"
26 print(person1.hometown) #CHINA
27 print(person.hometown) #China 对象修改完公有属性以后,类直接修改公有属性就不会生效了。

继承

 1 class Black_Person(person):
 2     def __init__(self, name, speed): #父类的构造方法需要先继承再重构,参数全部传入以后调用父类的构造函数,再给子类增加的参数赋值
 3         person.__init__(self, name)
 4         self.speed = speed
 5     def print_speed(self):
 6         print("%s speed is %s"%(self.name, self.speed))
 7     def Hello(self): #子类继承父类的方法名进行重构
 8         print("This is child class %s"%self.name)
 9 
10 class Yello_Person(person):
11     def __init__(self, name, technical):
12         person.__init__(self, name)
13         self.technical = technical
14     def print_technical(self):
15         person.Hello(self) #子类方法中可以直接调用父类的方法
16         print("%s technical is %s"%(self.name, self.technical))
17     def Hello(self): #子类继承父类的方法名进行重构
18         print("This is child class %s"%self.name)
19 black_p1 = Black_Person("Boret", "100")
20 yello_p1 = Yello_Person("lgl", "pingpang")
21 black_p1.Hello() #This is child class Boret
22 yello_p1.print_technical() #i‘m define a person class,my name is lgl      lgl technical is pingpang

多态

1 #多态,多态类似父类调用子类的方法,python不直接支持多态,可以使用下面方法间接实现调用一个方法将不同对象传入来调用传入对象对应的方法
2 def hello(obj):
3     obj.Hello()
4 hello(black_p1) #This is child class Boret
5 hello(yello_p1) #This is child class lgl

以上是关于类的私有属性 公有属性 继承 多态的主要内容,如果未能解决你的问题,请参考以下文章

Python类与对象最全总结大全(类实例属性方法继承派生多态内建函数)

面向对象day07:类的属性-继承-经典类

Python学习之旅--封装继承多态

Python学习之旅--封装继承多态

面向对象总结

python-- 类的继承(新式类/经典类)多态