python中的面向对象详解,python面向对象的特征
大家好,本文主要讲python中面向对象注意点的总结。有兴趣的同学过来看看,如果对你有帮助记得收藏。
00-1010一、继承二。是否继承对象类III的区别。封装四。类方法、静态方法和属性方法。python本质上有私有变量吗?摘要
目录
与java的继承不同,python支持多重继承。例如,Person类同时继承了Animal类和Species类。你可以这样写:
动物类(对象):
def __init__(self):
及格
类别规格:
def __init__(self):
及格
类人(动物、物种):
country=CN
def __init__(本人,姓名,年龄,性别):
self.name=name
年龄=年龄
自我.性=性
定义打印字符串(自身):
print( name : self . name \ n age : str(self . age) \ n sex : self . sex)
人=人(“杰克”,12,“男性”)
print(person.printString())
括号是父类,多类继承支持的优先级如下:
一、继承
继承object后,在不影响基本使用的情况下,一些属性将被添加到类中。
二、是否继承object类的区别
与java不同python没有private关键字,使用方法是在方法或变量前加“__”
比如:
类人(动物、物种):
__country=CN
def __init__(本人,姓名,年龄,性别):
self.name=name
年龄=年龄
自我。_ _性=性
def __breath(自我):
打印(self.name 正在呼吸.)
定义打印字符串(自身):
自我。_ _呼吸()
print( name : self . name \ n age : str(self . age) \ n sex : self。_ _性)
人=人(“杰克”,12,“男性”)
print(person.printString())
打印(人。_Person__sex)
打印(人。_Person__country)
人。_Person__breath()
当设置了“_ _”时,它被表示为私有变量或方法。
但python里却有破解私密访问的方法:
即:对象._类名__方法名()或变量名
保密性如下:
_ _ foo _ _ 3360定义了一个特殊的方法,一般是系统定义的名字,比如__init__()。
_foo:以单下划线开头的表示受保护类型的变量,即受保护类型只能允许自身访问其子类,不能用于from模块导入*
__foo:双下划线变量是私有的,
只能是允许这个类本身进行访问了。
foo:就是public方法
四、类方法、静态方法与属性方法
类方法,不能调用实例变量或方法,只能调用类方法或变量,使用时需要在方法上添加@classmethod,如下:
class Person(object):_number = 0
def __init__(self, name, age, sex):
self.name = name
self.age = age
self._number = 2 # 这里操作的是实例对象的变量
Person._number += 1 # 这里对类的静态变量进行操作
self.__sex = sex
def __breath(self):
print(self.name + "在呼吸.......")
@classmethod
def lucky(cls): # cls代表class类本身与self或this不同,self和this代表实例对象
person2 = Person("Alex", 13, male)
person2.printString()
print(cls._number) # 输出类变量
def printString(self):
self.__breath()
print("name:" + self.name + "\n" + "age:" + str(self.age) + "\n" + "sex:" + self.__sex)
person = Person("Jack", 12, "male")
person.printString() # 调用时用实例对象
Person.lucky() # 调用时用类
也可以使用静态方法的注解@staticmethod类
静态方法,不能调用类或实例的任何变量
属性方法使用注解@property,特点是调用时和调用属性变量类似。
class Person(object):def __init__(self, name, age, sex):
self.name = name
self.age = age
self.__sex = sex
@property
def lucky(self): # cls代表class类本身与self或this不同,self和this代表实例对象
print("233")
@lucky.setter
def lucky(self, num): # cls代表class类本身与self或this不同,self和this代表实例对象
print("233")
self.num = num
person = Person("Jack", 12, "male")
person.lucky # 调用时像调用属性变量一样调用
person.lucky = 1 # 传参和变量传参类似
print(person.num)
属性方法可以调用类和属性变量,传参和变量传参类似。
五、多态
class Animal(object): #相对于抽象类def show(self):
print("abstract class must be rewrite!")
raise Exception
class Person(Animal):
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.__sex = sex
def show(self):
print("hello")
person = Person("Jack", 12, "male")
print(person.show())
六、python是否存在实质意义上的私有变量?
回答:
不存在的
Python中没有禁止访问类中某一成员的保护机制。Java是一门非常工程化的语言,其哲学就是为工程服务,通过各种限制,尽可能减少程序员编写错误代码的机会。而Python则相反,其哲学为信任编码者,给程序员最少的限制,但程序员必须为自己编写的代码负责。
那是否意味着Python认为面向对象编程不需要封装呢?答案也是否定的。Python通过编码规范而不是语言机制来完成封装,具体而言,Python规定了对变量命名的公约,约定什么样的变量名表示变量是私有的,不应该被访问(而不是不能被访问)。
总结
到此这篇关于python中面向对象的注意点概述总结的文章就介绍到这了,更多相关python面向对象内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。