Python基础学习笔记(四)
面向对象的三个基本特征:
类与对象的概念:
类和变量是面向对象编程的两个核心概念
类:对一群具有相同特征(属性)或者行为(方法)的事物一个统称,抽象的,如:王者荣耀里的泛指的英雄
对象:由类创建出来的一个具体存在,可以直接使用,如:英雄中的李白
类的设计:
1.类型:满足大驼峰命名法(每个单词首字母大写,单词与单词之间没有下划线)
2.属性:事物具有什么样的特征
3.方法:事物具有什么样的行为
属性与方法的确定:
1.对对象特征的描述,可以定义成属性
2.对象具有的行为(动词),通常可以定义成方法
类的定义以及创建对象:
类定义的格式:
创建对象格式:
实例属性:
通过"self.变量名"定义的属性,称为实例属性,也称为实例变量,每个实例包含类的一个单独副本
初始化(一般在__int__函数中):self.实例变量名 = 初始值
其他函数中可以通过self访问:self.实例变量 = 值
创建对象实例,通过对象访问:obj1.实例变量名 = 值
例子:
class Person: def __init__(self,name,age): self.name = name self.age = age def say_hi(self): print(‘您好!我叫%s‘%(self.name)) person = Person(‘HHS‘,‘21‘) person.say_hi() print(‘今年{0}‘.format(person.age))
输出:
您好!我叫HHS
今年21
类属性:
Python也允许声明属于类本身的变量,即类变量、静态属性
类属性属于整个类,不是特定实例的一部分,而是所有实例之间共享的一个副本
初始化(一般在类体中):类变量名 = 初始值
类的访问:类名.类变量名 = 值
例子:
class Person:
count = 0
name = "HHS"
#test
Person.count += 1
print(Person.count) #1
print(Person.name) #HHS
p1 = Person()
p2 = Person()
print((p1.name,p2.name)) #(‘HHS‘, ‘HHS‘)
Person.name = ‘华南理工大学广州学院‘
print((p1.name,p2.name)) #(‘华南理工大学广州学院‘, ‘华南理工大学广州学院‘)
p2.name = ‘计算机科学与技术‘
print((p1.name,p2.name)) #(‘华南理工大学广州学院‘, ‘计算机科学与技术‘)
p2.count += 1
print((Person.count,p1.count,p2.count)) #(1, 1, 2)
说明:
类属性如果通过‘obj.属性名‘访问,则属于该实例的实例属性,虽然类属性可以使用对象实例来访问,但这样容易造成困惑。所以建议不要这样使用,而是应该使用标准的访问方式:类名.类变量名
私有属性和公有属性:
Python类的成员没有访问控制限制,与其他面向对象的语言不同
通常约定两个下划线开头且吧不以两个下划线结束的属性为私有(private),其他为公共(public)
不能直接访问私有属性,但可以在方法中访问
class A:
__name = ‘class A‘
def get_name():
print(A.__name)
#test
A.get_name() #class A
A.__name #AttributeError: type object ‘A‘ has no attribute ‘__name‘
特殊属性:
以双下划线开始和结束的方法,称为特殊方法
常见的特殊方法:
object.__dict__ 对象的属性字典
object.__class__ 对象所属的类
class.__bases__ 类的基类元组
class.__bases__ 类的基类
class.__name__ 类的名字
class.__mro__ 方法查找顺序,基类的顺序
class.__subclasses__() 子类序列
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def say_hi(self):
print(‘您好!我叫%s‘%(self.name))
person = Person(‘HHS‘,‘21‘)
print(person.__dict__) #object.__dict__ 输出:{‘name‘: ‘HHS‘, ‘age‘: ‘21‘}
print(person.__class__) #object.__class__ 输出:<class ‘__main__.Person‘>
print(Person.__bases__) #class.__bases__ 输出:(<class ‘object‘>,)
print(Person.__base__) #class.__base__ 输出:<class ‘object‘>
print(Person.__name__) #class.__name__ 输出:Person
print(Person.__mro__) #class.__mro__ 输出:(<class ‘__main__.Person‘>, <class ‘object‘>)
print(Person.__subclasses__()) #class.__subclasses__() 输出:[]
持续更新
原文:https://www.cnblogs.com/hhs1998/p/11769879.html