Python3进阶-1-面向对象编程 对象属性和方法的定义和调用

avatar 2024年03月18日11:47:34 0 406 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此

今天开始记录一下 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

 

  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0