今天开始记录一下 Python 面向对象的一些基本知识
直接看代码中的注释
完整代码:https://github.com/saysky/python_demo
一、类属性定义
Python代码
# Python 3.7.4
# 定义Person类,继承于object类
class Person:
# 类属性定义,类似于java的static属性
MAX_AGE = 150 # 最大年龄,150岁。公开属性,类似java的public权限,可以直接读取和修改
__MAX_HEIGHT = 250 # 最大身高,250cm。私有属性以__开头,类似java的private权限,对外访问需要提供公开方法
# 定义类方法,私有方法对外访问需要提供公开方法
@classmethod # 只有类方法需要加这个注解
def get_MAX_HEIGHT(cls):
return cls.__MAX_HEIGHT
print(Person.MAX_AGE)
print(Person.get_MAX_HEIGHT())
Person.MAX_AGE = 120 # 可以直接修改
# 也可以创建对象来访问类型属性,java不支持
p = Person
print(p.MAX_AGE)
二、定义和操作实例属性
例1 定义无参初始化方法,直接为对象赋予新属性
class Person:
# 初始化方法,类似java的构造方法,什么都不做
def __init__(self): pass
# 创建实例,并赋值,不需要事先定义这个属性
p = Person()
p.age = 18
print(p.age)
例2 在初始化方法里进行属性赋值
class Person:
# 初始化方法,类似java的构造方法,给属性赋初始值
def __init__(self):
self.age = 18
self.country = 'China'
# 创建实例,并赋值,不需要事先定义这个属性
p = Person()
print(p.age, p.country)
# 提示:如果访问未赋值的属性会报错,如 p.name
例3 通过类似java的”构造方法“传入
class Person:
# 初始化方法,类似java的构造方法,给属性赋初始值
def __init__(self, name, age):
self.name = name
self.age = age
# 创建实例,并赋值,不需要事先定义这个属性
p = Person("张三", 18)
print(p.name, p.age)
三、类方法和实例方法
# Python 3.7.4
class Person:
# 初始化方法,类似java的构造方法,给属性赋初始值
def __init__(self, name, age):
self.__name = name # 私有方法,调用 p.name或p.__name会报错
self.__age = age
@staticmethod
def sayHello():
print('Hello!!!')
def getName(self):
return self.__name
def setName(self, name):
self.__name = name
# 1.调用类方法
Person.sayHello()
# 2.创建实例
p = Person("言曌", 18)
# 调用实例方法
print(p.getName())
p.setName("言曌GG")
print(p.getName())
四、实例方法和类方法,实例属性和类属性优先级问题
结论:实例的属性或方法优先调用
# Python 3.7.4
class Person:
name = '我是类方法属性'
@classmethod
def sayHello(cls):
print('类方法 Hello')
def __init__(self):
self.name = '我是实例的属性'
def sayHello(self):
print('我是实例方法 Hello222')
# p = Person # 不会调用 def __init__(self)
# print(p.name) # 调用类的
p = Person() # 不会调用 def __init__(self)
print(p.name) # 调用实例的
p.sayHello() # 调用实例的
## 输出内容如下:
# 我是实例的属性
# 我是实例方法 Hello222
完整代码:https://github.com/saysky/python_demo
test1~test4
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏